1.小端法(little-endian)就是低位位元組排放在記憶體的低位址端(即該值的起始位址),
高位位元組排放在記憶體的高位址端;
2.大端法(big-endian)就是高位位元組排放在記憶體的低位址端(即該值的起始位址),
低位位元組排放在記憶體的高位址端;
網路上傳輸的資料都是位元組流,對於乙個多位元組數值,在進行網路傳輸的時候,先
傳遞哪個
位元組?也就是說,當接收端收到第乙個位元組的時候,它將這個位元組作為高位
位元組還是低位位元組
處理,是乙個比較有意義的問題;
udp/tcp/ip協議規定:把接收到的第乙個位元組當作高位位元組看待,這就要求
傳送端傳送
的第乙個位元組是高位位元組;而在傳送端傳送資料時,傳送的第乙個位元組是該數值
在記憶體中的起始
位址處對應的那個位元組,也就是說,該數值在記憶體中的起始位址處對應
的那個位元組就是要傳送的
第乙個高位位元組(即:高位位元組存放在低位址處);由此可見,多
位元組數值在傳送之前,在記憶體中應該
是以大端法存放的;
所以說,網路位元組序是大端位元組序;
比如,我們經過網路傳送整型數值0x12345678時,在80x86平台中,它是以小端發存放
的,在傳送之前需要使用系統提供的位元組序轉換函式htonl()將其轉換成大端法存放的數值。
示例程式:
#include #include int main(int argc,char** argv)
x86平台上的輸出:
local order:
[0]: 0x78 addr:4289157020 //低位位元組存放在低位址處,則是小端法;
[1]: 0x56 addr:4289157021
[2]: 0x34 addr:4289157022
[3]: 0x12 addr:4289157023 //高位位元組存放在高位址處;
htonl order:
[0]: 0x12 addr:4289157020 //由此看出,主機位元組序與網路位元組不一樣;
[1]: 0x34 addr:4289157021
[2]: 0x56 addr:4289157022
[3]: 0x78 addr:4289157023
文章**:
大端 小端 網路位元組序
2010 10 10 17 44 58 分類 c vc c 舉報 字型大小訂閱 一 大端 小端 大端 和 小端 表示多位元組值的哪一端儲存在該值的起始位址處 小端儲存在起始位址處,即是小端位元組序 大端儲存在起始位址處,即是大端位元組序 或者說 1.小端法 little endian 就是低位位元組...
大端 小端 網路位元組序
網路位元組序 network byte order 一般是指大端 big endian,對大部分網路傳輸協議而言 傳輸,大端小端的概念是面向多位元組資料型別的儲存方式定義的,小端就是低位在前,大端就是高位在前,其中 前 是指靠近記憶體低位址,儲存在硬碟上就是先寫那個位元組 1 首先大小端是面向多位元...
大端小端 網路位元組序
0 背景 網路上的資料流是位元組流,對於乙個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第乙個位元組的時候,它是將這個位元組作為高位還是低位來處理呢?1 網路位元組序定義 收到的第乙個位元組被當作高位看待,這就要求傳送端傳送的第乙個位元組應當是高位。2 網路位元組序為...