大端和小端

二进制文件的字节顺序问题:
大端字节(big-endian)和小端字节(little-endian)

大小端前传
其实不是很理解为什么会有这个问题,只能理解为 不同的机器有不同的字节存放习惯,从一开始就没有统一,后来一各自发展,也就很难统一了。。。
因为现行的计算机都是以8位一个字节为存储单位,那么一个大于8位整数的存放就存在高位和低位数的存放顺序问题。既然顺序是重要的又没法统一,就需要明确区分一下以便使用了。

我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

大小端
所谓大小端模式就是存储数据时,数据的高低位怎么存储在地址的高低位上。
具体如下:
大端模式:数据的高位,存放在地址的低位。(高位存低位,低位存高位)
小端模式:数据的高位,存放在地址的高位。(高位存高位,低位存低位)

1)大端模式:
低地址 ——————> 高地址
0x12 | 0x34 | 0x56 | 0x78
2)小端模式:
低地址 ——————> 高地址
0x78 | 0x56 | 0x34 | 0x12

大端和小端_第1张图片

可见,大端模式和字符串的存储模式类似。大端与从左到右的阅读习惯一致。

大小端对比
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。

大小端后传
TCP/IP协议
RFC1700规定使用“大端”字节序为网络字节序,其他不使用大端的计算机要注意了,发送数据的时候必须要将自己的主机字节序转换为网络字节序(即“大端”字节序),接收到的数据再转换为自己的主机字节序。这样就与CPU、操作系统无关了,实现了网络通信的标准化。

你可能感兴趣的:(编程笔试面试相关)