大端Big-Endian 、小端Little-Endian

来源:互联网 发布:微信菜单事件推送 php 编辑:程序博客网 时间:2024/05/22 15:15

Big-Endian和Little-Endian的定义如下:

 

举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:


1)大端模式: 高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

低地址 -----------------> 高地址

0x12  |  0x34  |  0x56  |  0x78


2)小端模式:高位字节排放在内存的高地址端, 低位字节排放在内存的低地址端。

低地址 ------------------> 高地址

0x78  |  0x56  |  0x34  |  0x12


可见,大端模式和字符串的存储模式类似。

3)下面是两个具体例子:

16bit宽的数0x1234在Little-endian模式(以及Big-endian模式)CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址小端模式存放内容大端模式存放内容0x40000x340x120x40010x120x34



32bit宽的数0x12345678在Little-endian模式以及Big-endian模式)CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址小端模式存放内容大端模式存放内容0x40000x780x120x40010x560x340x40020x340x560x40030x120x78

 4)大端小端没有谁优谁劣,各自优势便是对方劣势:

小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。


#include<stdio.h> int main(){    short  x=0x1122;   char x0,x1;    char *p= (char *) &x;    x0= p[0];  //低地址单元    x1= p[1];  //高地址单元    printf("x0=0x%x,x1=0x%x",x0,x1);// 若x0=0x11,则是大端; 若x0=0x22,则是小端......    return 0;}



原创粉丝点击