大端字节序、小端字节序、主机字节序、网络字节序

小端字节序(Little Endian):高字节存放在存储器高的地址,低字节存放在低地址。
大端字节序(Big Endian): 高字节存放在存储器低的地址,低字节存放在高地址。
由于PC机大多采用的是小端字节序,因此,小端字节序又被称为主机字节序;而网络传输过程中,数据接收端往往采用大端字节序的方式读取格式化数据,因此,大端字节序也被成为网络字节序。利用联合体UNION 的字节存放顺序是由低地址开始存放的特性,可以对机器的主机字节序进行判断,代码如下:

/*TST.c  测试大小端程序 */
#include<stdio.h>
union
{
    short value;
    char  ubyte[sizeof(short)];
}tst;

int main()
{
    tst.value = 0x0102;
    if(tst.ubyte[0]==1 &&tst.ubyte[1]==2)
    {
        printf("BIG ENDIAN\n");
    }
    else if(tst.ubyte[0]==2 &&tst.ubyte[1]== 1)
    {
        printf("LITTLE ENDIAN\n");
    }
    else
    {
        printf("unknown\n");
    }
    return 0;
}

该例中,对于16Bit 的数0x0102来说,在不同字节序下数据存放方式如下:

地址偏移 大端字节序 小端字节序
addr 0x01 0x02
addr+1 0x02 0x01

产生字节序的原因:
1. 计算机处理数据的时候是以字节为单位的,但是,多数数据类型长度都大于一个字节,如long、int等;
2. 寄存器的大于一个字节,CPU从寄存器读取数据的时候就会出现先后的问题;
在不同主机间进行数据通讯的过程中,由于数据发送端和数据接收端字节序不统一会造成数据解释的不同;而在同一主机不同进程间数据交互的过程中,也会有同样的问题(C程序进程和JAVA进程通讯过程中,JAVA虚拟机采用的是大端字节序,而C程序进程采用主机字节序),因此,在数据通讯过程中都需要对数据进行字节序的统一管理,常用的函数有下面四个:
(待补充)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值