大端(Big-Endian)和小端(Little-Endian)
采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将高位存放在高地址。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。
比如0x3132的存放形式
大端模式:31 32 //符合人类的正常思维
小端模式:32 31
互联网使用的网络字节顺序采用大端模式进行编址,而主机字节顺序根据处理器的不同而不同,如PowerPC处理器使用大端模式,而Pentuim处理器使用小端模式。
示例1:
#include<stdio.h>
int main(void )
{
shorttest;
test= 0x3132;
char*c = (char *)&test;
inti;
for(i= 0; i < sizeof(short); ++i){
printf("%x", *c++);
}
printf("\n");
return0;
}
运行结果:
32 31
证明我的处理器是小端模式
示例2: 用gdb查看变量地址的内容
#include<netdb.h>
#include<sys/socket.h>
#include<stdio.h>
intmain(int argc, char **argv)
{
shorta = 0x0102;
shortb = htons(a);
return0;
}
用gdb进行调试
(gdb)x/2xb &a //gdb调试命令:x/<n/f/u><addr>
0xbffff39e: 0x02 0x01 //再次证明我的处理器是小端模式
(gdb)x/2xb &b
0xbffff39c: 0x01 0x02
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
原文:http://www.52rd.com/Blog/Detail_RD.Blog_imjacob_14837.html