大端和小端有那么难记吗,一语破的

大端和小端的那些东西,已有很多文章讲解,在此也不过多赘述其原理了,其实也没啥复杂的。本文还是主要分享下个人的想法,重点在“记”

大端(Big-endian)和小端(Little-endian)

上定义

大端(Big-endian)模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。这种存放方式符合人类的阅读顺序。
小端(Little-endian)模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

大小端图解
看图就明白了。
顺便提一下:这里有个 MSB(Most Significant Bit)最高有效位 的概念。指二进制中代表最高值的比特位,这一位对数值的影响最大,其分量也是不言而喻的。比较与之相反的“最低有效位”(LSB)。
这与十进制数字是类似的。亿位上的数字显然比个位上的更重要。

另外: Intel x86的CPU使用的是LE(Windows中称为“主机字节序”)。TCP/IP协议规定使用BE(就是“网络字节序”(Network Byte Order)),所以在使用socket编程时需要使用htons(),htonl(),ntohs(),ntohl()来倒字节序。

为何称大端和小端?

这里也是重点。我看到很多文章和书籍里都很避讳这个词,觉得词不达意,自命为什么高尾端,低尾端,大尾端,小尾端之类的。(为煞费苦心引入这个词的科学家感到委屈,haha~~) 其实,我觉得结合该词的来源,直译的“大端和小端”已经完全够准确了,甚至是一语破的。

来源:(Endian)的这个词最早出自名著《格列佛游记》。在小人国中,皇帝的祖父小时候吃鸡蛋,一次按古法(先打破鸡蛋较大的一端)打鸡蛋时碰巧将一个手指弄破了,因此他的父亲,当时的皇帝,就下了一道敕令,命令全体臣民吃鸡蛋时打破鸡蛋较小的一端,违令者重罚。历史告诉我们,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位…
由此也渐渐形成了两个派别:从圆头开始将鸡蛋敲开的人被归为Big Endian派,从尖头开始将鸡蛋敲开的人被归为Littile Endian派。
后来,这一对词语被位知名学者引入了计算机界。Endian术语表示数据在存储器中的存放顺序。在计算机行业Big Endian的存储顺序和Little Endian存储顺序的厂商也引起一场纷争。

接下来,就该谈谈这个词有多言简意赅了。
首先,无论是数据存放在内存中还是磁盘(还是要加载到内存缓冲区的),CPU在寻址到数据后,调用数据总线取数据,不论几字节取,顺序都是从低地址往高地址取。然后,就要看数据是如何在内存中存放的了。是将数据的最高有效位先存储还是将最低先存储呢?
把数据比作待食用的熟鸡蛋,把CPU比作食用鸡蛋的小人。先从鸡蛋更有分量的大头端吃起,你就是Big-endian派的了,先从鸡蛋更安全的小头端吃起,你就是Little-endian派的了。从中间你就奇葩了。

所以呢,我觉得用这两个词再恰当不过了。欢迎谈论。


无意间看到一个巧妙的检测大小端方法分享下:

static union {
    char isBigE[4];
    int isBigE_;
} g_endianTest = {
0x00, 0x00, 0x00, 0x01
};
#define IS_BIG_ENDIAN ((char)g_endianTest.isBigE_)

2020.08.22 update
myAvatar

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
crc32是一种循环冗余校验算法,用于检测数据传输或存储过程中的错误。在计算机中,数据被表示为二进制数字,而大端小端则是指在存储或传输二进制数据时,高位字节和低位字节的存放顺序。 大端小端两种存储方式的区别可以用一个简单的例子来解释。假设要存储数字0x12345678,其中高位字节为0x12,低位字节为0x78。在大端存储方式下,高位字节先被存储在内存的低地址处,低位字节存储在高地址处,即0x12存储在低地址,0x78存储在高地址。而在小端存储方式下,则正好相反,即0x12存储在高地址,0x78存储在低地址。 对于crc32算法而言,它是将数据按照由高位到低位的顺序进行处理,并在计算过程中进行循环移位和异或运算。因此,crc32算法对于数据的存储顺序是敏感的。在大端存储方式下,高位字节存储在低地址,低位字节存储在高地址,因此crc32算法会按照从高位到低位的顺序处理数据。而在小端存储方式下,高位字节存储在高地址,低位字节存储在低地址,因此crc32算法会按照从低位到高位的顺序处理数据。 总而言之,crc32大端小端是指crc32算法对于数据存放顺序的敏感性。在大端存储方式下,高位字节存储在低地址,低位字节存储在高地址,对应crc32算法从高位到低位处理数据的顺序;而在小端存储方式下,高位字节存储在高地址,低位字节存储在低地址,对应crc32算法从低位到高位处理数据的顺序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值