C++转C#:CString与char转换结果不一致问题求助
C++转C#字符转换不一致问题解决建议
问题核心原因
C++的char是单字节有符号类型,Windows环境下默认采用本地ANSI编码(如Windows-1252),-28对应的编码值为0xE4,映射字符为ä;而C#的char是UTF-16双字节无符号类型,直接将-28强制转换为char时,会取整数补码的低16位(0xFFE4),对应UTF-16字符¦,两者编码逻辑完全不同。
解决步骤
- 先将整数
-28转换为对应的单字节无符号值:int iVal = -28; byte targetByte = (byte)iVal; // 得到0xE4,即228 - 使用Windows-1252编码(匹配C++默认ANSI编码)将字节转换为目标字符:
char resultChar = Encoding.GetEncoding(1252).GetChars(new[] { targetByte })[0]; // 此时resultChar为'ä' - 也可以直接生成对应字符串:
string resultStr = Encoding.GetEncoding(1252).GetString(new[] { targetByte });
注意事项
如果你的C++环境使用的是其他ANSI编码(如GB2312),需要将1252替换为对应编码的代码页编号(比如GB2312对应936)。
内容的提问来源于stack exchange,提问作者Gopinath
相关产品推荐
相关产品推荐

