網(wǎng)絡(luò)字節(jié)序?yàn)槭裁词谴蠖?網(wǎng)絡(luò)傳輸結(jié)構(gòu)體,字節(jié)序,大小端怎么解決?
網(wǎng)絡(luò)傳輸結(jié)構(gòu)體,字節(jié)序,大小端怎么解決?1. C/C code #pragma pack(push) #pragma pack(1) //定義結(jié)構(gòu)體 #pragma pack(pop) 2. 傳輸
網(wǎng)絡(luò)傳輸結(jié)構(gòu)體,字節(jié)序,大小端怎么解決?
1. C/C code #pragma pack(push) #pragma pack(1) //定義結(jié)構(gòu)體 #pragma pack(pop) 2. 傳輸?shù)臅r(shí)候都使用網(wǎng)絡(luò)字節(jié)序,這是標(biāo)準(zhǔn)的做法。
發(fā)送方htonl/s 接收方ntohl/spython的4字節(jié)整型存儲是大端還是小端?
python中的字節(jié)序,取決于處理器的字節(jié)序。
比如在x86中就是小端字節(jié)序。在Motorola 和 PowerPC是大端字節(jié)序。你可以通過變量sys.byteorder來檢測python運(yùn)行的系統(tǒng)的字節(jié)序。小端字節(jié)序與高端字節(jié)序比較有什么不同?
因?yàn)榇笮《硕加泻芏鄳?yīng)用,cpu很多也能在這兩種標(biāo)準(zhǔn)之間切換。比如,常見的pc機(jī)是小端存儲,但TCP/IP協(xié)議中數(shù)據(jù)是按照大端格式存放的,兩者統(tǒng)一出現(xiàn)在pc機(jī)上,能保證運(yùn)行無誤。沒有必要做統(tǒng)一標(biāo)準(zhǔn)的工作,即使做了,也一定要兼容以前的兩個(gè)標(biāo)準(zhǔn)。
是大字節(jié)序還是小字節(jié)序?
擺渡網(wǎng)友提供:這個(gè)和IP數(shù)據(jù)報(bào)的格式有關(guān),IP數(shù)據(jù)報(bào) 中有一個(gè)16位的字段表示IP數(shù)據(jù)報(bào)的長 度,這個(gè)16位是二進(jìn)制表示的,每一 位中可以為0或者1,那最大可表示的 數(shù)據(jù)報(bào)的長度就是16個(gè)1,也就是1111 1111 1111 1111 表示IP數(shù)據(jù)報(bào)的長度, 這16位二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制就是655 35,樓主呢可以自己算下,要是樓主 不會(huì),我?guī)蜆侵靼阉惴谐鰜?,轉(zhuǎn)換 成十進(jìn)制算法:2的15次方 2的14次方 2的13次方 2的12次方 2的11次方 2 的10次方..... 2的1次方 2的0次方。
樓 主可以按下計(jì)算器算下,轉(zhuǎn)換過來就 是65535,就是因?yàn)镮P協(xié)議中只用了16 位來表示IP數(shù)據(jù)報(bào)的長度,所以也就限 制了其最大只能表示65535的字節(jié)長度 。linux操作系統(tǒng)是大端還是小端?
字節(jié)序不是由操作系統(tǒng)決定的,而是由cpu架構(gòu)決定的,比如 x86 的是 little endian,而 PPC (PowerPC) 是big endian。 所以跑在 x86 上的 linux/windows 都是小端,而跑在 PPC 上的linux則是大端。 (PS: 實(shí)際上 PowerPC 是即支持大端也支持小端,但是由于歷史原因默認(rèn)用大端)
詳細(xì)講解一下何為網(wǎng)絡(luò)字節(jié)序以及何為主機(jī)字節(jié)序?
網(wǎng)絡(luò)字節(jié)序是大端存儲方式,也就是高字節(jié)存在其實(shí)地址
這是數(shù)數(shù)據(jù)0x01020304
這是內(nèi)存地址4000400140024003
反過來就是小端存儲方式。
而本機(jī)字節(jié)序和具體的主機(jī)有關(guān),有的機(jī)器的本機(jī)字節(jié)序采用大端,有的采用小端
在網(wǎng)絡(luò)編程進(jìn)行數(shù)據(jù)傳輸時(shí)一般用htonl宏將本機(jī)序裝換成網(wǎng)絡(luò)序
另外如果本機(jī)使用大端存儲,那么這個(gè)htonl宏就被置為空,所以不會(huì)改變順序
全部是本人手打,歡迎指正
是不是大多數(shù)電腦的主機(jī)字節(jié)序都是小端的?
普通人用的桌面電腦,只要是Intel或AMD的x86/x64架構(gòu)就一定是小端字節(jié)序。
外很多ARM CPU可以選擇數(shù)據(jù)指令字節(jié)序,不過通常也都是運(yùn)行小端字節(jié)序(比如我們的智能手機(jī))。網(wǎng)絡(luò)設(shè)備,像PowerPC核心的一些路由器,默認(rèn)運(yùn)行大端字節(jié)序。