1 c#
我使用 Encoding.Unicode.GetString 从 emf 记录中获取一个字符,生成的字符串仅包含一个字符,但有两个字节。我对编码方案和多字节字符集一无所知。我想将该字符转换为其等效的单个十六进制值。您能帮我解决这个问题吗?
不清楚你的意思。C# 中的Achar是一个 16 位无符号值。如果您有一个二进制数据源并且想要获取 Unicode 字符,则应该使用 将Encoding二进制数据解码为字符串,您可以将其作为char值序列进行访问。
您可以将 a 转换char为十六进制字符串,方法是首先将其转换为整数,然后使用 X 格式说明符,如下所示:
char = '\u0123';
string hex = ((int)c).ToString("X4"); // Now hex = "0123"
Run Code Online (Sandbox Code Playgroud)
现在,还剩下一个问题:代理对。不在基本多语言平面(U+0000 到 U+FFFF)中的值由两个 UTF-16 代码单元表示 - 高代理项和低代理项。您可以使用这些char.IsSurrogate* 方法来检查代理对...尽管将代理对转换为 UCS-4 值比较困难(据我所知)。如果您幸运的话,您将不需要处理这个...如果您乐意将二进制数据转换为 UTF-16 代码单元序列而不是严格的 UCS-4 值,则您不需要担心。
编辑:鉴于您的评论,仍然不完全清楚您要从什么开始。你说你有两个字节......它们是分开的还是在字节数组中?他们代表什么?大概是某种特定编码的文本……但哪种编码呢?一旦知道编码,就可以轻松地将字节数组转换为字符串:
byte[] bytes = ...;
// For example, if your binary data is UTF-8
string text = Encoding.UTF8.GetString(bytes);
char firstChar = text[0];
string hex = ((int)firstChar).ToString("X4");
Run Code Online (Sandbox Code Playgroud)
如果您可以编辑您的问题以提供有关您实际情况的更多详细信息,那么帮助您找到解决方案会容易得多。如果您通常对编码以及文本和二进制数据之间的差异感到困惑,您可能想阅读我关于它的文章。
| 归档时间: |
|
| 查看次数: |
14504 次 |
| 最近记录: |