大小端模式详解

大端模式:数据的高位保存在低地址,数据的低位保存在高地址。

例如,数据0x12345678大端的存储模式如下

 地址                     数据

0x00000001        0x12

0x00000002        0x34

0x00000003        0x56

0x00000004        0x78

 

小端模式:数据的高位保存在高地址,数据的低位保存在低地址。

例如,数据0x12345678小端的存储模式如下

 地址                     数据

0x00000001        0x78

0x00000002        0x56

0x00000003        0x34

0x00000004        0x12

 

速记法1:大端按照数字的书写顺序进行存储,小端颠倒书写顺序进行存储。

速记法2:首地址存储的高位是大端,首地址存储的低位是小端。

 

优缺点:

小端模式 :强制转换数据不需要调整字节内容,可以定义指针直接从字节流中获取整型等其它类型的数据。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。

 

判断机器字节序的方法:

bool is_big_endian(void)

{

    int ret_val = 1;

    if(((char*)&ret_val)[(sizeof(int) - 1)] == 1){

        return true;//大端

    }else{

        return false;//小端

    }

}

一般操作系统都是小端,而通讯协议是大端的。

 

大小端的转化方法:

16位数:#define big_to_little16 (a)           ((( (unsigned short)(a) & 0xFF00)  >> 8)  |  (( (unsigned short)(a) & 0x00FF)  << 8))

32位数:#define big_to_little32 (a)           ((( (unsigned int)(a) & 0xFF000000)  >> 24)  | \

                                                                         (( (unsigned int)(a) & 0x00FF0000)  >> 8)  | \

                                                                         (( (unsigned int)(a) & 0x0000FF00)  << 8)  | \

                                                                         (( (unsigned int)(a) & 0x000000FF)  << 24) )

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值