关于字节序(大端法、小端法)的定义
《UNXI網(wǎng)絡編程》定義:術(shù)語“小端”和“大端”表示多字節(jié)值的哪一端(小端或大端)存儲在該值的起始地址。小端存在起始地址,即是小端字節(jié)序;大端存在起始地址,即是大端字節(jié)序。
?
也可以說:?
1.小端法(Little-Endian)就是低位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,高位字節(jié)排放在內(nèi)存的高地址端。?
2.大端法(Big-Endian)就是高位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,低位字節(jié)排放在內(nèi)存的高地址端。
舉個簡單的例子,對于整形0x12345678。它在大端法和小端法的系統(tǒng)內(nèi)中,分別如圖1所示的方式存放。
?
?
網(wǎng)絡字節(jié)序我們知道網(wǎng)絡上的數(shù)據(jù)流是字節(jié)流,對于一個多字節(jié)數(shù)值,在進行網(wǎng)絡傳輸?shù)臅r候,先傳遞哪個字節(jié)?也就是說,當接收端收到第一個字節(jié)的時候,它是將這個字節(jié)作為高位還是低位來處理呢??
網(wǎng)絡字節(jié)序定義:收到的第一個字節(jié)被當作高位看待,這就要求發(fā)送端發(fā)送的第一個字節(jié)應當是高位。而在發(fā)送端發(fā)送數(shù)據(jù)時,發(fā)送的第一個字節(jié)是該數(shù)字在內(nèi)存中起始地址對應的字節(jié)。可見多字節(jié)數(shù)值在發(fā)送前,在內(nèi)存中數(shù)值應該以大端法存放。?
網(wǎng)絡字節(jié)序說是大端字節(jié)序。?
比如我們經(jīng)過網(wǎng)絡發(fā)送0x12345678這個整形,在80X86平臺中,它是以小端法存放的,在發(fā)送前需要使用系統(tǒng)提供的htonl將其轉(zhuǎn)換成大端法存放,如圖2所示。
?
字節(jié)序測試程序?不同cpu平臺上字節(jié)序通常也不一樣,下面寫個簡單的C程序,它可以測試不同平臺上的字節(jié)序。
| 1? | #include?<stdio.h> |
| 2? | #include?<netinet/in.h> |
| 3? | int?main() |
| 4? | { |
| 5? | ????int?i_num?=?0x12345678; |
| 6? | ????printf("[0]:0x%x\n",?*((char?*)&i_num?+?0)); |
| 7? | ????printf("[1]:0x%x\n",?*((char?*)&i_num?+?1)); |
| 8? | ????printf("[2]:0x%x\n",?*((char?*)&i_num?+?2)); |
| 9? | ????printf("[3]:0x%x\n",?*((char?*)&i_num?+?3)); |
| 10? | ? |
| 11? | ????i_num?=?htonl(i_num); |
| 12? | ????printf("[0]:0x%x\n",?*((char?*)&i_num?+?0)); |
| 13? | ????printf("[1]:0x%x\n",?*((char?*)&i_num?+?1)); |
| 14? | ????printf("[2]:0x%x\n",?*((char?*)&i_num?+?2)); |
| 15? | ????printf("[3]:0x%x\n",?*((char?*)&i_num?+?3)); |
| 16? | ? |
| 17? | ????return?0; |
| 18? | }? |
在80X86CPU平臺上,執(zhí)行該程序得到如下結(jié)果:?
[0]:0x78?
[1]:0x56?
[2]:0x34?
[3]:0x12
[0]:0x12?
[1]:0x34?
[2]:0x56?
[3]:0x78
分析結(jié)果,在80X86平臺上,系統(tǒng)將多字節(jié)中的低位存儲在變量起始地址,使用小端法。htonl將i_num轉(zhuǎn)換成網(wǎng)絡字節(jié)序,可見網(wǎng)絡字節(jié)序是大端法。
總結(jié)點:80X86使用小端法,網(wǎng)絡字節(jié)序使用大端法。
轉(zhuǎn)載于:https://www.cnblogs.com/liuguowei/p/4825882.html
總結(jié)
以上是生活随笔為你收集整理的关于字节序(大端法、小端法)的定义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 化工企业数据分析报表系统项目之销售模块分
- 下一篇: 中国地区码