Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用BinaryReader正确读取16字节无符号整数_C#_.net_Vb.net_Binaryreader - Fatal编程技术网

C# 如何使用BinaryReader正确读取16字节无符号整数

C# 如何使用BinaryReader正确读取16字节无符号整数,c#,.net,vb.net,binaryreader,C#,.net,Vb.net,Binaryreader,我需要在.NET中解析二进制流以转换16字节无符号整数。我想使用BinaryReader.ReadUIntXX()函数,但没有可用的BinaryReader.ReadUInt128()函数。我假设我必须使用ReadByte函数来运行我自己的函数并构建一个数组,但我不知道这是否是最有效的方法? 谢谢 我很想为此获得荣誉,但只要快速搜索一下网络,维奥拉: 这是代码示例(在同一页上) 大多数开发人员唯一不知道的是big-endian和little-endian之间的区别。就像生活中的大多数事情一样,

我需要在.NET中解析二进制流以转换16字节无符号整数。我想使用BinaryReader.ReadUIntXX()函数,但没有可用的BinaryReader.ReadUInt128()函数。我假设我必须使用ReadByte函数来运行我自己的函数并构建一个数组,但我不知道这是否是最有效的方法?
谢谢

我很想为此获得荣誉,但只要快速搜索一下网络,维奥拉:

这是代码示例(在同一页上)

大多数开发人员唯一不知道的是big-endian和little-endian之间的区别。就像生活中的大多数事情一样,人类无法在非常简单的事情上达成一致(左舵和右舵汽车也是一个很好的例子)。当位(记住1和0以及二进制数学)被排列时,位的顺序将决定字段的值。一个字节是第八位。。然后是有符号和无符号。。但我们还是要遵守秩序。数字1(1)可以用两种方式之一表示,10000000或00000001(详细解释请参见注释中的说明)-正如代码中的注释所示,大端是前面的一个,小端是零的一个。(见http://en.wikipedia.org/wiki/Endianness-对不起,新用户,他们不会让我多次超链接…)为什么我们不能达成一致


多年前,我在处理嵌入式系统时学到了这一课……还记得链接吗?:)我是否显示了我的年龄???

guid的大小正好是16个字节

Guid=新的Guid(字节数组)


但是你不能用Guid做数学。如果需要,可以在internet上搜索.net的一些BigInteger实现。然后,您可以将bytearray转换为一个大整数。

我认为0xA3、SLaks和Darin Dimitrov的评论回答了这个问题,但将其放在一起。 NET中的binary reader类不支持BinaryReader.ReadUInt128(),我能找到的唯一解决方案是创建自己的函数。正如0xA3所提到的,在.NET4.0中有一个BigInt数据类型。我正在根据每个人的评论创建自己的功能。
谢谢

.Net没有
UInt128
类型。您想对整数做什么?您是在谈论这个UInt128数据类型:还是.NET 4.0引入的BigInteger()结构?从流中读取16个字节并将它们存储到数组中不会有问题。将它们转换为整数将非常困难,因为.NET中没有能够表示128位整数的整数类型。因此,您将不得不从.NET 4.0中滚动您自己的或使用BigInteger()。@0xA3:+1如果我可以为BigInteger:)嗯,这个“16字节整数”最初是如何进入流的?据我所知,没有一种通用语言在本机上支持这种类型。这很可能不起作用,因为问题要求128位的值。但是我们不能确定,因为没有给出足够的细节。同意@0xA3。OP要求存储128位无符号整数。实际上,在16位系统中,大端数表示1是00000000000001,而小端数表示00000001,而不是1000000000000。我可以确认每个人的评论都是正确的;这不起作用,而且endian描述不正确。斯科特·张伯伦提供了正确的澄清。再次感谢你的帮助。
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