使用 BitConverter.GetBytes() 将 Int16 转换为 UByte[] 在 C# 中不起作用
Converting Int16 to UByte[] is not working in C# with BitConverter.GetBytes()
我正在为一种示例语言开发一个超级简单的 parser/compiler,我在数字转换方面遇到了一些问题。我有以下代码作为测试:
Console.WriteLine(BitConverter.GetBytes(0x010D)[0]);
Console.WriteLine(BitConverter.GetBytes(0x010D)[1]);
并在控制台中打印:
13
1
我很困惑,因为这意味着数组是 [13, 1]。我会假设它应该像原始数字一样从左到右。有没有办法解决这个问题,还是我只需要始终像对待它一样对待它?
非常感谢!
P.S。
抱歉,如果这是愚蠢的,我似乎找不到任何与我的问题有关的东西,这很可能是因为这是一个用户错误。
我决定回答这个问题,因为 Jon Skeet 评论了一个合适的答案。
这个问题的解决方案真的很简单,这只是我不知道的使用字节和二进制的怪癖。
参见:
Endianness Wikipedia Article
GetBytes Docs
字节顺序本质上是数字中字节的顺序。在我的例子中,对于 .NET,数字是小端的,这意味着较小的数字在前,然后是大数字。对于问题的示例,0x010D
将按原样在小端表示为 { 0x0D, 0x01 }
。但是,如果要以大端表示,它将表示为 { 0x01, 0x0D }
再次感谢 Jon Skeet 的有益评论!
我正在为一种示例语言开发一个超级简单的 parser/compiler,我在数字转换方面遇到了一些问题。我有以下代码作为测试:
Console.WriteLine(BitConverter.GetBytes(0x010D)[0]);
Console.WriteLine(BitConverter.GetBytes(0x010D)[1]);
并在控制台中打印:
13
1
我很困惑,因为这意味着数组是 [13, 1]。我会假设它应该像原始数字一样从左到右。有没有办法解决这个问题,还是我只需要始终像对待它一样对待它?
非常感谢!
P.S。 抱歉,如果这是愚蠢的,我似乎找不到任何与我的问题有关的东西,这很可能是因为这是一个用户错误。
我决定回答这个问题,因为 Jon Skeet 评论了一个合适的答案。
这个问题的解决方案真的很简单,这只是我不知道的使用字节和二进制的怪癖。
参见:
Endianness Wikipedia Article
GetBytes Docs
字节顺序本质上是数字中字节的顺序。在我的例子中,对于 .NET,数字是小端的,这意味着较小的数字在前,然后是大数字。对于问题的示例,0x010D
将按原样在小端表示为 { 0x0D, 0x01 }
。但是,如果要以大端表示,它将表示为 { 0x01, 0x0D }
再次感谢 Jon Skeet 的有益评论!