字节序-大小端

计算机的基本存储单元是8位单字节
多字节数据,如4字节的整型数据如何存储的呢? 是高位在内存高字节?还是低位在内存高字节?即字节是按如何顺序存放的?也就是所谓的字节序,按照存放顺序分为大端序(Big-endian)和小端序(Little-endian)。

内存地址访问是由低地址到高地址方向进行的。

大端序(Big-endian)
高位在内存低地址,即顺着内存的地址增长方向,是先放高位数据,再放低位数据。如0x12345678,在内存中存放依次是:12 34 56 78,这种字节序符合我们的阅读习惯。

小端序(Little-endian)
低位在内存低地址,即顺着内存的地址增长方向,是先放低位数据,再放高位数据。如0x12345678,在内存中存放依次是:78 56 34 12。通常ARM嵌入式产品用的是小端序。

网络序,采用的是大端序,符合人们的阅读习惯,不管什么主机在进行网络通信时,一律要转换成标准的网络序(htons、htonl函数)。

/* 编程确定主机是何种字节序 */
/* 返回:0 大端序;1 小端序 */
char is_little_endian()
{
    int a=1;   //高位是0 低位是1
    return *(char*)&a;  //取第一字节数据返回
}

PS:不同主机cpu采用的字节序可能不统一,有的是大端,有的是小端,假如统一标准,字节序的问题也就不存在了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值