0%

大端 小端 字节序

#include <stdio.h>
/*
    关于字节序:
对于一个整数0x12346=5678,在内存中占4个字节
从低地址开始,每个字节分别存的是 12,34,56,78就说明是大端CPU; 用于网络编程,JAVA
从低地址开始,每个字节分别存的是 78,56,34,12就说明是小端CPU; x86架构是小端
下面判断在内存的单个字节中二进位是按什么顺序排的?
*/

//定义位域
typedef struct bit_field
{
    unsigned char b0:1;  //b0指向低地址那一端的第一位,b1、b2依次排列下去
    unsigned char b1:1;
    unsigned char b2:1;
    unsigned char b3:1;
    unsigned char b4:1;
    unsigned char b5:1;
    unsigned char b6:1;
    unsigned char b7:1;
}BIT_FIELD;

int main()
{
    int i = 0xFF00001B;    //小端存放方式  1B 00 00 FF
    BIT_FIELD * p = ( BIT_FIELD * )&i;  // p指向 1B

    printf("%u ",p->b0);
    printf("%u ",p->b1);
    printf("%u ",p->b2);
    printf("%u ",p->b3);
    printf("%u ",p->b4);
    printf("%u ",p->b5);
    printf("%u ",p->b6);
    printf("%un",p->b7);

    getchar();
    return 0;
}

输出结果:1 1 0 1 1 0 0 0

在小端机器上验证得到,  在一个字节内部,  低位放在靠近低地址这个方向上。大端方式的高位靠近低地址方向存放。

http://blog.csdn.net/ce123_zhouwei/article/details/6971544