大小端問題與主位元組序及網路位元組序(一般在x86和arm下為小端模式):
(1)(2)
例如:0x0000 0x12
0x0001 0x34
0x0002 0xab
0x0003 0xcd
大端模式讀取為:1234abcd;小端模式讀取資料為:cdab3412.
而網路位元組序這是tcp/ip協議中定義好的一種資料表示格式,它是與你的機器的cpu,作業系統什麼的無關的,這樣可以保證資料在網路中傳輸時,不管怎麼樣都能正確的解釋了,網路位元組序選擇了big endian。這樣就給編寫網路程式的程式設計師帶來乙個問題,程式設計師必須把本地資料從主機位元組序轉換成網路位元組序傳送到主機,同時,主機也必須把收到的資料從網路位元組序轉換成本地位元組序,這樣才能保證雙方正確的收發資料,不然就是產生bug。
大端模式處理器的位元組序到網路序不需要轉換,此時ntohs(n) = n, ntohl(n) = n, 而小端模式處理器則需要轉換。
現在上**:
#include #include #include using namespace std;
typedef struct
s_test;
typedef long long int64;
int main()
; s_test *p = &s;
int *i = (int*)p;
printf("%4x\n", htonl(*i));
printf("%4x\n", *(int*)p);
return 0;
}
列印結果為
3050600
60503
網路位元組序以及大小端
記憶體中的多位元組資料相對於記憶體位址有大端和小段之分,磁碟檔案中的多位元組資料相對於檔案中的偏移位址也有大端和小端之分,網路資料流同樣有大端小端之分,那麼如何定義網路資料流的位址呢?傳送主機通常將傳送快取區中的資料按記憶體位址從低到高的順序發出,接收主機把從網路上接到的位元組依次儲存在接受緩衝區中...
大小端 網路位元組序 本地位元組序問題
總結 1 80x86使用小端法 即本地位元組序 網路位元組序使用大端法。2 二進位制的網路程式設計中,傳送資料,最好以unsigned char,unsigned short,unsigned int 來處理,unsigned short unsigned short 以網路位元組序處理後再拷貝到傳...
大端位元組序 小端位元組序(網路位元組序 主機位元組序)
大端位元組序 整數的高位位元組儲存在記憶體的低位址處,低位元組儲存在記憶體的高位址處。一般pc大多採用小端位元組序,也稱為主機位元組序。網路上傳輸採用大端位元組序,也稱為網路位元組序。linux中常用轉換函式如下 include uint32 t htonl uint32 t hostlong 無符...