大端(Big-Endian)和小端(Little-Endian)

大端(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



你可能感兴趣的:(c,互联网,网络)