3 回答

TA貢獻1845條經驗 獲得超8個贊
一個有趣的說明。您可能已經知道,C#不定義字節序,它取決于CPU架構,如果您正在編寫跨平臺/架構應用程序,則可以使用調用BitConverter.IsLittleEndian
的方法進行檢查。
指示在此計算機體系結構中存儲數據的字節順序(“字節序”)。
言論
不同的計算機體系結構使用不同的字節順序存儲數據。“大端”表示最重要的字節位于單詞的左端?!靶《恕北硎咀钪匾淖止澪挥趩卧~的右端。
注意
您可以通過向方法傳遞 16 位、32 位或 64 位整數,從網絡字節順序轉換為主機的字節順序,而無需檢索字段的值。
BitConverter.IsLittleEndian
IPAddress.HostToNetworkOrder
如果您需要不同的字節序,則可以使用 輕松轉換。Array.Reverse
byte[] bytes = BitConverter.GetBytes(num);
Array.Reverse(bytes, 0, bytes.Length);
或者按位切換類型,如 和 ,您可以使用不安全和其他類型的指針更進一步intlong
public uint SwapBytes(uint x)
{
x = (x >> 16) | (x << 16);
return ((x & 0xFF00FF00) >> 8) | ((x & 0x00FF00FF) << 8);
}
public ulong SwapBytes(ulong x)
{
x = (x >> 32) | (x << 32);
x = ((x & 0xFFFF0000FFFF0000) >> 16) | ((x & 0x0000FFFF0000FFFF) << 16);
return ((x & 0xFF00FF00FF00FF00) >> 8) | ((x & 0x00FF00FF00FF00FF) << 8);
}

TA貢獻1784條經驗 獲得超7個贊
當然是小端序。
請記住,IEEE浮點是一個位場,符號比指數具有更高的意義,而指數又具有比尾數更高的意義。
整數示例只有一個字段,并且設置了其低位。
您的雙例在尾數字段中具有所有零位,而更重要的指數位字段為非零。(這兩者都受到IEEE-754使用的偏置的影響)
有效位位于較高的內存地址,就像小端整數一樣。
作為參考,IEEE-754 for 是1.0
{ sign: 0, exponent: 0x3ff, mantissa: 0x0000000000000 }

TA貢獻1829條經驗 獲得超7個贊
雙精度的二進制表示形式與整數的二進制表示形式不同。它遵循 IEEE 標準來存儲浮點值。使用 IEEE 標準并獲取 1 的二進制表示,然后檢查 fir 字節序。
- 3 回答
- 0 關注
- 162 瀏覽
添加回答
舉報