1 字节序
由于不同的计算机系统采用不同的字节序存储数据,同样一个4字节的32位整数,在内存中存储的方式就不同. 字节序分为小尾字节序(Little Endian)和大尾字节序(Big Endian), Intel处理器大多数使用小尾字节序, Motorola处理器大多数使用大尾(Big Endian)字节序;
小尾就是低位字节排放在内存的低端,高位字节排放在内存的高端。例如一个4字节的值为0x1234567的整数与高低字节对应关系:
01
23
45
67
Byte3
Byte2
Byte1
Byte0
高位字节--à---------à--------------à低位字节
将在内存中按照如下顺序排放:
内存地址序号
字节在内存中的地址
16进制值
0x03
Byte3
01
0x02
Byte2
23
0x01
Byte1
45
0x00
Byte0
67
大尾就是高位字节排放在内存的低端,低位字节排放在内存的高端。例如一个4字节的值为0x1234567的整数与高低字节对应关系:
01
23
45
67
Byte3
Byte2
Byte1
Byte0
高位字节--à---------à--------------à低位字节
将在内存中按照如下顺序排放:
内存地址序号
字节在内存中的地址
16进制值
0x03
Byte0
67
0x02
Byte1
45
0x01
Byte2
23
0x00
Byte3
01
2 网络字节序
TCP/IP各层协议将字节序定义为大尾,因此TCP/IP协议中使用的字节序通常称之为网络字节序。
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。
3 字串在内存中的存储(intel系列)
字串和整数是相反的,是安字串的索引从低到高存储到内存中的;
char s[4] = “abc”;
a
b
c
/0
s[0]
s[1]
s[2]
s[3]
将在内存中按照如下顺序排放:
内存地址序号
16进制值
指针P的位置
0xbffeadf7
/0
p+3
0xbffeadf6
c
p+2
0xbffeadf5
b
p+1
0xbffeadf4
a
p
int main(void)
{
char s[4] = "abc";
char *p = s;
printf("%02x, %02x, %02x, %02x/n", &s[0], &s[1], &s[2], &s[3]);
printf("%02x,
网络字节顺序 来自淘豆网m.daumloan.com转载请标明出处.