網路位元組順序nbo(network byte order):按從高到低的順序儲存,在網路上使用統一的網路位元組順序,可以避免相容性問題。
the order in which the bytes of a multi-byte number are transmitted on a network - most significant byte first (as in "big-endian" storage).
主機位元組順序(hbo,host byte order):不同的機器hbo不相同,與cpu設計有關計算機資料儲存有兩種位元組優先順序:高位位元組優先和低位位元組優先。
c#中可以通過bitconverter.islittleendian
console.writeline("需要注意的是無符號的整型bitconverter.islittleendian =
", bitconverter.islittleendian);
uint a=3758205120;
從下圖可以看出最高位的位元組是 1110 0000 是沒有符號位的
ipaddress中處理的都是有符號的
int d=2147483647; //2^31-1
//d=2147483648; //int的取值不能超出2147483647,這個賦值溢位了
但是uint就可以賦值: uint d = 2147483648;
===2023年09月23日更新===
位元組陣列的高低位問題
console.writeline("輸出結果是:bitconverter.islittleendian =
", bitconverter.islittleendian);
const
int number = 0x01020304
; console.writeline(
"0x01020304 =
", number);
var array =bitconverter.getbytes(number);
int index = -1
;
foreach (byte b in
array)
] = 0x
", index, b.tostring("x2"
)); }
bitconverter.islittleendian = true
0x01020304 = 16909060
array[0] = 0x04
array[1] = 0x03
array[2] = 0x02
array[3] = 0x01
0x01020304對應4位元組的數字16909060,二進位制為 0000 0001,0000 0010,0000 0011,0000 0100
4個位元組從高到低: 最高位是0000 0001 最低位是0000 0100
bitconverter.getbytes(number);經過bitconverter.getbytes獲取的位元組陣列,下標小的對應於最低位
console.writeline("輸出結果:bitconverter.islittleendian =
", bitconverter.islittleendian);
var result = int.maxvalue.tostring("x"
); console.writeline(result);
//result: 7fffffff
result = bitconverter.tostring(bitconverter.getbytes(int
.maxvalue));
console.writeline(result);
//result: ff-ff-ff-7f
bitconverter.islittleendian = true
7fffffff
ff-ff-ff-7f
解答:int.maxvalue.tostring("x")
outputs7fffffff
, that is, the number2147483647
as a whole.
on the other hand,bitconverter.getbytes
returns an array of bytes representing2147483647
in memory. on your machine, this number is stored in little-endian (highest byte last). andbitconverter.tostring
operates separately on each byte, therefore not reordering output to give the same as above, thus preserving the memory order.
however the two values are the same :7f-ff-ff-ff
forint.maxvalue
, in big-endian, andff-ff-ff-7f
forbitconverter
, in little-endian. same number.
位元組序的高低位
高位和低位,參看計算器-->程式設計師,左高右低
比如0x0102 兩個位元組 01是高位,02是低位
小端位元組序:高位在高位址,低位在低位址
大端位元組序:高位在低位址,低位在高位址
192.168.1.224
小端位元組序:0xc0a801e0 對應數字3232236000
大端位元組序:0xe001a8c0 假如按照小端來解析數字的話是3758205120,按照大端來解析首先反轉,然後再解析會是3232236000
大小端以及位元組序的問題
網路位元組順序nbo network byte order 按從高到低的順序儲存,在網路上使用統一的網路位元組順序,可以避免相容性問題。the order in which the bytes of a multi byte number are transmitted on a network m...
大小端以及主位元組序和網路位元組序問題
大小端問題與主位元組序及網路位元組序 一般在x86和arm下為小端模式 1 2 例如 0x0000 0x12 0x0001 0x34 0x0002 0xab 0x0003 0xcd 大端模式讀取為 1234abcd 小端模式讀取資料為 cdab3412.而網路位元組序這是tcp ip協議中定義好的一...
大小端,位元組序問題
總結 1 80x86使用小端法,網路位元組序使用大端法。2 二進位制的網路程式設計中,傳送資料,最好以unsigned char,unsigned short,unsigned int 來處理,unsigned short unsigned short 以網路位元組序處理後再拷貝到傳送的buffer...