You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:27:08