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

来源:互联网 发布:淘宝同学课程助手 编辑:程序博客网 时间:2024/06/05 07:45

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