【发布时间】:2013-06-25 18:43:56
【问题描述】:
在 c++ 中,我有常规的 char(类似于 'J' '0' 等)。我使用Marshal.ReadByte 方法在c# 中阅读它。所以现在在 c# 中我有字节。如何将此字节转换为字符?所以我想将c++中的'J'转换为c#中的'J'。
【问题讨论】:
-
我不想将 1 转换为 '1'。我想将 1 转换为 1。
标签: c#
在 c++ 中,我有常规的 char(类似于 'J' '0' 等)。我使用Marshal.ReadByte 方法在c# 中阅读它。所以现在在 c# 中我有字节。如何将此字节转换为字符?所以我想将c++中的'J'转换为c#中的'J'。
【问题讨论】:
标签: c#
假设源 char 使用 ASCII 或 Latin-1 (ISO 8859-1),在 C# 中你会使用 char ch = (char)Marshal.ReadByte(...);。
这是因为 ASCII 和 Latin-1 编码是 Unicode 的子集。 .NET char 是一个 UTF-16 代码单元,只需一个演员表就可以很好地适应其中的每一个。
如果您认为您会处理其他源编码,更好的选择可能是在字节数组上使用Encoding.GetString()。请记住,某些编码需要多个单元来编码单个代码点(UTF-8、EUC-JP、Shift-JIS 等),因此单个 char 可能不够。
【讨论】:
byte 隐式转换为char(但可以显式转换)。
chars 不是一对一的,您确实需要在整个字符串上使用类似 Encoding.GetString() 的东西,正如 Cory 建议的那样。而且我认为 cast 是“我有 X 类型的变量并想将其转换为 Y 类型”的最优雅的解决方案。
char(代表 UTF-16 代码单元)。