关于字节序及其判断方法

定义

计算机内部硬件存储数据的顺序方式


分类

大端:数据高字节保存在内存低地址,低字节反之。

小段:数据高字节保存在内存高地址,低字节反之。


具体应用

1.x86处理器是小端序,arm处理器字节序可配置。

2.TCP/IP协议规定用大端序作为网络字节序。

3.串行数据传输协议USB、RS-232/422/485等均采用小端序,而I2C和SPI协议则采用大端序。


关于网络字节序的补充:

网络上传输的数据都是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节呢?也就是说,当接收端收到第一个字节的时候,它将这个字节作为高位字节还是低位字节处理,这是一个很有意义的问题。

UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待,这就要求发送端发送的第一个字节是高位字节,而在发送端发送数据时,发送的第一个字节是该数值在内存中的起始地址处对应的那个字节,即这个字节就是要发送的第一个高位字节。由此可见,多字节数值在发送之前,在内存中应该是以大端序存放的。


大小端判断方法

int check()
{
    union Un
    {
        char c;
        int i;
    }un;

    un.i = 1;
    return un.c;
}

int main()
{
    int ret = check();  //ret为1则为小端,反之为大端
    return 0;
}

原理解释:

利用union结构体从低地址开始保存变量(上例中的char),且同一时间只有一个成员占有内存(大小为内存最大的成员),当为int成员赋值为1之后,这个1作为数据低字节保存,而char成员位于内存低地址,所以char打印出来为1的话也就意味着数据低字节保存在低地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天不打滑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值