使用 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 的有益评论!