我需要解析.NET中的二進制流來轉換16字節的無符號整數。我想使用BinaryReader.ReadUIntXX()函數,但沒有可用的BinaryReader.ReadUInt128()函數。我假設我將不得不使用ReadByte函數來滾動我自己的函數並構建一個數組,但我不知道這是否是最有效的方法? 謝謝!如何使用BinaryReader正確讀取16字節的無符號整數
回答
我很想採取信貸這一點,但一個快速搜索網上的,和中提琴:
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(詳細解釋見註釋中的說明) - 正如代碼中的評論所暗示的那樣,大寫字母是前面的那個,litte - 印度是一個零。 (請參閱http:// en.wikipedia.org/wiki/Endianness -sorry新用戶,他們不會讓我超鏈接多次....)爲什麼我們不能只是同意?
很多年前,我在處理嵌入式系統時學到了這一課。 :)我是否顯示我的年齡?
由於問題要求128位值,因此這很可能不起作用。但是我們無法確定,因爲沒有給出足夠的細節。 – 2010-06-09 15:19:46
同意@ 0xA3。 OP要求存儲128位無符號整數。 – 2010-06-09 15:27:15
其實你是錯在Endianness在Big Endian的16位系統中代表1是00000000 00000001,在Little Endian是00000001 00000000而不是10000000 00000000 – 2010-06-09 15:31:18
guid的大小正好是16個字節。
Guid guid = new Guid(byteArray);
但你不能用Guid做數學。如果需要,您可以在Internet上搜索一些BigInteger for .net的實現。然後,您可以將您的bytearray轉換爲BigInteger。
我認爲來自0xA3,SLaks和Darin Dimitrov的評論回答了這個問題,但把它放在一起。 .NET中的二進制閱讀器類不支持BinaryReader.ReadUInt128(),我可以找到的唯一解決方案是創建我自己的函數。正如0xA3提到的,.NET 4.0中有一個BigInt數據類型。我正在根據每個人的意見創建自己的功能。 謝謝!
- 1. BinaryReader未對齊 - 沒有讀取正確的字節數
- 2. 如何從QFile讀取帶符號的16位整數?
- 3. 無法正確提取整數字節
- 4. 如何使用ifstream正確讀取文件中的無符號整型變量?
- 5. 從2個16位有符號字節獲取帶符號整數?
- 6. 如何強制BinaryReader正確讀取此數組?
- 7. 如何使用gets()讀取無符號字符數組?
- 8. 從C#中的BinaryReader讀取字符串不讀取第一個字節
- 9. 如何使用BinaryReader讀取方法讀取動態數據?
- 10. MATLAB:讀取無符號16位二進制文件的兩個字節
- 11. 16位無符號整數(uint16_t)
- 12. Qt QByteArrays + 16位無符號整數
- 13. 無符號16位和64位整數
- 14. Java整數/雙無符號字節
- 15. 如何讀取短(16位)從一個無符號字符整數(8比特)緩衝器
- 16. 如何正確讀取整數?
- 17. 當字節可用時,NSInputStream讀取返回無符號整數最大值
- 18. 如何從Java字符串中獲取正好16個字節
- 19. 以小端字節順序從套接字讀取無符號整數
- 20. 需要將16位無符號大端字節解碼爲Haskell中的整數
- 21. 以無符號整數使用Java Prepared Statement的正確方法
- 22. 如何正確讀取json字符串
- 23. 如何在Java中將文件讀取爲無符號字節?
- 24. 如何反轉無符號整數的4個字節?
- 25. 如何讀取二進制文件的無符號整數?
- 26. 的XmlReader無法正確讀取節點
- 27. C++如何讀取字節爲整數字節序獨立?
- 28. 讀「無符號整型」使用「CIN」
- 29. 我如何使用`矢量<無符號整數*> VEC;`正確
- 30. 大整數(字符串,16)
.Net沒有'UInt128'類型。你想用整數做什麼? – SLaks 2010-06-09 15:08:32
你在談論這個UInt128數據類型:http://msdn.microsoft.com/en-us/library/cc230384%28PROT.10%29.aspx或BigInteger(http://msdn.microsoft.com/en -us/library/system.numerics.biginteger.aspx)與.NET 4.0引入的結構? – 2010-06-09 15:09:35
從流中讀取16個字節並將它們存儲到數組中不會成爲問題。將它們轉換爲整數將是因爲在.NET中沒有這種整數類型能夠表示128位整數。因此,您必須自行推出或使用.NET 4.0中的BigInteger(http://msdn.microsoft.com/zh-cn/library/dd268207(v=VS.100).aspx)。 – 2010-06-09 15:10:24