数据在内存中有2种存放方式:
大端序(Big-Endian):低位字节放在高位地址
小端序(Little-Endian):相反
x86系列则采用little endian方式存储数据
如:0x12345678
数据以8bit位单位,在内存中的存储如下:
Big Endian+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
TCP/IP协议规定,网络数据流应采用大端字节序,即先收到的放在高位,后受到的放在低位。
头文件:arpa/inet.h
#include <arpa/inet.h> uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort);h表示host,
n表示network,
l表示32位长整数,
s表示16位短整数
eg:
#include <stdio.h> void main() { short s = 0x0102; short *p = &s; if( *( (char*)p ) == 0x01 ) //0x0201 printf( "This is big-endian.\n" ); else if (*( (char*)p ) == 0x02 ) //0x0102 printf( "This is little-endian.\n" ); else printf( "Unknown.\n" ); return 0; }
[1] 字节序 http://zh.wikipedia.org/wiki/%E5%A4%A7%E7%AB%AF%E5%BA%8F#.E5.A4.A7.E7.AB.AF.E5.BA.8F
[2] 字节序(Endian),大端(Big-Endian),小端(Little-Endian)http://www.cppblog.com/tx7do/archive/2009/01/06/71276.html