我需要在 .NET 中解析二进制流以转换 16 字节无符号整数。我想使用 BinaryReader.ReadUIntXX() 函数,但没有可用的 BinaryReader.ReadUInt128() 函数。我假设我将不得不使用 ReadByte 函数滚动我自己的函数并构建一个数组,但我不知道这是否是最有效的方法? 谢谢!
最佳答案
我很乐意将此归功于此,但只要快速搜索一下网络,中提琴:
http://msdn.microsoft.com/en-us/library/bb384066.aspx
这是代码示例(位于同一页面上)
byte[] bytes = { 0, 0, 0, 25 };
// If the system architecture is little-endian (that is, little end first),
// reverse the byte array.
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int: {0}", i);
// Output: int: 25
大多数开发人员唯一不知道的是大端和小端之间的区别。就像生活中的大多数事情一样,人类根本无法就非常简单的事情达成一致(左手和右手汽车也是一个很好的例子)。当位(记住 1 和 0 以及二进制数学)被布置时,位的顺序将决定字段的值。一个字节是八位..然后是有符号和无符号..但让我们坚持顺序。数字 1(一)可以用两种方式之一表示,10000000 或 00000001(详细解释请参阅注释中的说明)- 正如代码中的注释所暗示的那样,big-endian 是前面的那个,litte -endian 是零。 (参见 http://en.wikipedia.org/wiki/Endianness - 对不起新用户,他们不会让我超链接不止一次....)为什么我们不能都同意???
我多年前在处理嵌入式系统时吸取了这个教训……还记得链接吗? :) 我是不是暴露年龄了??
关于c# - 如何使用 BinaryReader 正确读取 16 字节无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007055/