Normaly如果你想例如佔5字節數組它會像水木清華{} 0x00,0x00,0x00,0x05但BitConverter給了我相反的數組({} 0x05,0x00,0x00,0x00) 爲什麼它是如此,我哪裏錯了?C#BitConverter問題
2
A
回答
3
很可能是您處於小端架構(這是常見x86和x86-64架構的情況)。您可以使用BitConverter.IsLittleEndian
屬性進行驗證。 在這樣的結構中,至少顯著字節至上,這解釋了爲什麼
BitConverter.GetBytes(5)
產生
{ 0x05, 0x00, 0x00, 0x00 }
你當然可以,如果基於系統/目標需要扭轉陣列字節順序。你可以找到這樣一個EndianBitConverter
列出here。
+0
謝謝ansvers!現在每件事情都很清楚 –
0
我寫了下面的包裝類來處理期望Little Endien的BitConverter
的情況。
public static Int16 ToInt16(byte[] data, int offset)
{
if (BitConverter.IsLittleEndian)
{
return BitConverter.ToInt16(BitConverter.IsLittleEndian ? data.Skip(offset).Take(2).Reverse().ToArray() : data, 0);
}
return BitConverter.ToInt16(data, offset);
}
public static Int32 ToInt32(byte[] data, int offset)
{
if (BitConverter.IsLittleEndian)
{
return BitConverter.ToInt32(BitConverter.IsLittleEndian ? data.Skip(offset).Take(4).Reverse().ToArray() : data, 0);
}
return BitConverter.ToInt32(data, offset);
}
public static Int64 ToInt64(byte[] data, int offset)
{
if (BitConverter.IsLittleEndian)
{
return BitConverter.ToInt64(BitConverter.IsLittleEndian ? data.Skip(offset).Take(8).Reverse().ToArray() : data, 0);
}
return BitConverter.ToInt64(data, offset);
}
相關問題
- 1. Objective C BitConverter Equivalent
- 2. C#BitConverter錯誤
- 3. 幫助BitConverter!
- 4. BitConverter ToInt32 .NET
- 5. 關於在BitConverter
- 6. 相當於delphi中的c#bitconverter
- 7. 用於Java的Bitconverter
- 8. BitConverter VS鑄造差異
- 9. c/objective-c問題
- 10. 問題在C#
- 11. ReportProgress C#問題
- 12. c#Regex.Match問題
- 13. 問題 - 在C
- 14. C#WriteDirectory問題
- 15. 問題在C
- 16. C++ unordered_map問題
- 17. 問題在C++
- 18. C#keyhook問題
- 19. C++ SHGetFolderPath問題
- 20. C#Scope_Identity問題
- 21. C++ cin.fail()問題
- 22. C++,#ifdef問題
- 23. C++ GetCursorPos問題
- 24. getline問題C++
- 25. 問題在C++
- 26. JNI,C++問題
- 27. 問題與C#
- 28. C - Chomp問題
- 29. C++ segFault問題
- 30. linq問題(C#)
http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx大VS小端? –