a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

基于大端法、小端法以及網(wǎng)絡(luò)字節(jié)序的深入理解

2020-01-26 16:06:28
字體:
供稿:網(wǎng)友
關(guān)于字節(jié)序(大端法、小端法)的定義
《UNXI網(wǎng)絡(luò)編程》定義:術(shù)語“小端”和“大端”表示多字節(jié)值的哪一端(小端或大端)存儲(chǔ)在該值的起始地址。小端存在起始地址,即是小端字節(jié)序;大端存在起始地址,即是大端字節(jié)序。

也可以說:
1.小端法(Little-Endian)就是低位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,高位字節(jié)排放在內(nèi)存的高地址端。
2.大端法(Big-Endian)就是高位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,低位字節(jié)排放在內(nèi)存的高地址端。
舉個(gè)簡(jiǎn)單的例子,對(duì)于整形0x12345678。它在大端法和小端法的系統(tǒng)內(nèi)中,分別如圖1所示的方式存放。

zijiexu_pic_1 

網(wǎng)絡(luò)字節(jié)序

我們知道網(wǎng)絡(luò)上的數(shù)據(jù)流是字節(jié)流,對(duì)于一個(gè)多字節(jié)數(shù)值,在進(jìn)行網(wǎng)絡(luò)傳輸?shù)臅r(shí)候,先傳遞哪個(gè)字節(jié)?也就是說,當(dāng)接收端收到第一個(gè)字節(jié)的時(shí)候,它是將這個(gè)字節(jié)作為高位還是低位來處理呢?
網(wǎng)絡(luò)字節(jié)序定義:收到的第一個(gè)字節(jié)被當(dāng)作高位看待,這就要求發(fā)送端發(fā)送的第一個(gè)字節(jié)應(yīng)當(dāng)是高位。而在發(fā)送端發(fā)送數(shù)據(jù)時(shí),發(fā)送的第一個(gè)字節(jié)是該數(shù)字在內(nèi)存中起始地址對(duì)應(yīng)的字節(jié)。可見多字節(jié)數(shù)值在發(fā)送前,在內(nèi)存中數(shù)值應(yīng)該以大端法存放。
網(wǎng)絡(luò)字節(jié)序說是大端字節(jié)序。
比如我們經(jīng)過網(wǎng)絡(luò)發(fā)送0x12345678這個(gè)整形,在80X86平臺(tái)中,它是以小端法存放的,在發(fā)送前需要使用系統(tǒng)提供的htonl將其轉(zhuǎn)換成大端法存放,如圖2所示。

zijiexu_pic_2

字節(jié)序測(cè)試程序

不同cpu平臺(tái)上字節(jié)序通常也不一樣,下面寫個(gè)簡(jiǎn)單的C程序,它可以測(cè)試不同平臺(tái)上的字節(jié)序。

復(fù)制代碼 代碼如下:

   #include <stdio.h>
   #include <netinet/in.h>
   int main()
   {
       int i_num = 0x12345678;
       printf("[0]:0x%x/n", *((char *)&i_num + 0));
       printf("[1]:0x%x/n", *((char *)&i_num + 1));
       printf("[2]:0x%x/n", *((char *)&i_num + 2));
       printf("[3]:0x%x/n", *((char *)&i_num + 3));

       i_num = htonl(i_num);
       printf("[0]:0x%x/n", *((char *)&i_num + 0));
       printf("[1]:0x%x/n", *((char *)&i_num + 1));
       printf("[2]:0x%x/n", *((char *)&i_num + 2));
       printf("[3]:0x%x/n", *((char *)&i_num + 3));

       return 0;
   }

在80X86CPU平臺(tái)上,執(zhí)行該程序得到如下結(jié)果:
[0]:0x78
[1]:0x56
[2]:0x34
[3]:0x12

[0]:0x12
[1]:0x34
[2]:0x56
[3]:0x78

分析結(jié)果,在80X86平臺(tái)上,系統(tǒng)將多字節(jié)中的低位存儲(chǔ)在變量起始地址,使用小端法。htonl將i_num轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序,可見網(wǎng)絡(luò)字節(jié)序是大端法。

總結(jié)點(diǎn):80X86使用小端法,網(wǎng)絡(luò)字節(jié)序使用大端法。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 国产精品久久久久久久久久久久久 | 亚洲a级在线观看 | 操操操操操 | 亚洲一区二区三区在线视频 | 亚洲免费电影一区 | 97超碰免费 | 精品一区在线 | 狠狠干网站 | 一区二区三区四区视频 | 中文字幕不卡av | 久久99视频| 亚洲欧美一区二区三区 | 欧美精品一区二区三区在线四季 | 色小妹三区| 黄色永久网站 | 三区在线 | 欧美一区久久 | 国产精品久久久久9999赢消 | 日韩五码在线 | 国产色在线观看 | 欧美视频在线观看一区 | 91av国产视频 | 中文字幕亚洲欧美日韩在线不卡 | 国产视频福利在线观看 | 一区二区亚洲 | 欧美亚洲国产日韩 | av在线一区二区 | 99久久久国产精品 | 国产视频第一页 | 日韩欧美国产网站 | 羞羞视频在线观看免费 | 国产精品久久久久一区二区三区共 | 影音先锋成人资源网 | 日韩免费观看 | 日本在线一区二区 | 欧美极品一区二区三区 | 国产成人精品一区二区视频免费 | 亚洲精品视频免费 | 精品国产免费久久久久久尖叫 | 久久草在线视频 | 日韩在线视频观看 |