c# - C# 中的 char (C++) 操作

标签 c# c++ character-encoding char

我正在尝试将用 C++ 编写的旧代码重写为 C# - 代码对字符进行二进制操作,但我收到不同的结果(可能由于 C# 中的 Unicode,我做了一些错误的操作)。

我需要将此 C++ 代码重写为 C#:

myChar = 'K' ^ 128;

这段代码在 C++ 中的结果在 C++ 的数据类型 char 中是 -53 ('È')

C# 中的相同操作会导致 C# 数据类型 char 中的 203(再次为“È”)

所以 char 没问题,但我需要与 C++ 中相同的字节值(因为我用它进行数学运算)。您能否推荐一种方法,如何将 C# char 安全地转换为等效的 C++ 字节值?

谢谢

最佳答案

在单字节二进制补码表示中,203 是 -53 的无符号解释。

如果您想使用 C++ signed char 的等效表示,类型应为 sbyte:

sbyte myChar = (sbyte)('K' ^ 128);

请注意,C++ 标准让实现来决定 char 是有符号还是无符号,这意味着某些符合标准的 C++ 将为 myChar 打印 203 ,而不是 -58,无需对您的代码进行任何更改。

关于c# - C# 中的 char (C++) 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789980/

相关文章:

java - 如何将 UTF-8 字节 block 转换为字符?

c# - 字符串中的特殊字符.Replace

c# - 在 TLS 加密下使用 DefaultNetworkCredential?

c# - 将 UIImage 转换为字节数组

C++ Linux basic_string::_M_construct null not valid 运行时错误

c++ - Memcpy 实现,严格别名

c++ - 任何 Microsoft 库都使用 Windows SBCS 代码页中的非拉丁数字来表示 C 字符串中的数字数据吗?

c# - 如何将 SqlBulkCopy 与 SMO 和事务结合使用

character-encoding - 使用 utf8 将带有 latin1 字符集的 mysql 4 迁移到 mysql 5

java - 国际化 JRE6 或 JDK6 或以 "cp037"编码方案读取文件