沙巴电竞官网

14May18_XXXXXL56Endian起源解析:背景、流传与表现

Endian是计算机领域中的一个术语,中文通常译为“端序”或“字节序”,用来描述一个多字节数据在内存、文件或通信数据流中的排列方式。简单说,Endian回答的是:一个数由多个字节组成时,哪个字节先放在较低的内存地址或数据流前面。

最常见的两种形式是Big-endian(大端序)和Little-endian(小端序)。大端序先保存高位字节,小端序先保存低位字节。因此,Endian不是某种数据类型,也不是加密算法,而是一种表示和存放数据的规则。

Endian到底是什么意思 ?

计算机中的整数通常不只占用一个字节。例如,一个32位整数会占用4个字节。人们书写十六进制数时,通常按照从高位到低位的顺序写出:

0x12345678

这个数可以拆成四个字节:12、34、56、78。问题在于,计算机把这些字节放入连续内存时,是否仍然从12开始排列。Endian描述的正是这种排列差异。

同一个数在两种端序下的内存排列
内存地址方向 大端序 Big-endian 小端序 Little-endian
较低地址 12 78
下一个地址 34 56
下一个地址 56 34
较高地址 78 12

这里的“大小”不是指字节占用空间的大小,而是指字节在整个数值中的权重。12是这个例子中的高位字节,78是低位字节。大端序把高位字节放在前面,小端序把低位字节放在前面。

为什么会有Big-endian和Little-endian之分 ?

不同处理器、操作系统和数据交换规范在设计时,可能采用不同的字节排列约定。只要读写数据的双方遵守同一规则,数据就能被正确解释 ;如果一方按大端序写入,另一方却按小端序读取,同一串字节就可能被还原成完全不同的数值。

“Big-endian”和“Little-endian”这两个名称,通常被认为源自英国作家乔纳森·斯威夫特的《格列佛游记》。书中虚构了因为“鸡蛋应该从大头还是小头敲开”而产生分歧的两派。计算机领域借用了这个比喻:大端序先处理高位端,小端序先处理低位端。

因此,Endian在普通英语中并不是日常交流里常用的独立词语。它在技术语境中主要表示“端序”,常见形式包括:

  • Big-endian:大端序,也叫高位字节序。高位字节位于较低地址或数据流前端。
  • Little-endian:小端序,也叫低位字节序。低位字节位于较低地址或数据流前端。
  • Endianness:端序特性或字节序规则,表示某个系统、格式或协议采用哪一种排列方式。

理解了端序后,怎样判断一个字节串代表什么数 ?

判断时不能只看字节本身,还要知道数据采用的Endian规则。以字节串“12 34 56 78”为例,如果它按照大端序解释,结果是0x12345678 ;如果它按照小端序解释,排列后的数值则相当于0x78563412。

也就是说,字节串没有脱离上下文的唯一数值含义。文件格式、通信协议或程序接口通 ;崦魅饭娑ǘ诵。按照规定读取时,数据能够恢复为原来的数字 ;忽略规定时,就可能出现数值异常、长度判断错误或协议解析失败。

在内存语境中,可以用“低地址放什么”来快速判断:如果低地址放高位字节,就是大端序 ;如果低地址放低位字节,就是小端序。在数据流语境中,则可以看“最前面的字节”代表数值的哪一端。

Endian和位序、字符编码是一回事吗 ?

Endian最常指字节序,不应直接等同于位序。字节序决定多个字节之间的先后位置 ;位序则涉及一个字节内部的二进制位如何编号、传输或解释。例如,一个字节包含8个二进制位,协议可能规定先传最高有效位,也可能规定先传最低有效位,这属于位传输顺序问题。

因此,“大端”并不自动表示每个字节内部的位也按某种相同顺序排列。分析协议时,需要分别确认字节顺序和位顺序,不能仅凭Big-endian或Little-endian一个词推断所有细节。

Endian也和字符编码有关,但两者不是同一个概念。对于UTF-16或UTF-32这类每个字符可能占用多个字节的编码,通常需要区分大端和小端,例如UTF-16BE与UTF-16LE。UTF-8按照自身的字节编码规则工作,通常不区分UTF-8大端版和UTF-8小端版。

在什么场景中会看到Endian这个词 ?

在程序开发中,Endian常出现在处理二进制文件、网络协议、设备通信、数据库存储、跨平台数据交换和调试内存等场景。比如,程序把一个整数写入文件时,需要按照文件格式要求选择大端序或小端序 ;程序从网络读取多字节整数时,也要按照协议规定的网络字节序进行转换。

许多互联网协议把网络字节序规定为大端序,因此“转换为网络字节序”常常意味着把主机中的整数调整为大端排列。不过,网络字节序是协议约定,不能简单理解为所有计算机或所有网络数据天然都是大端序。

在实际阅读文档时,看到“little endian”通 ?梢岳斫馕暗臀蛔纸谙瘸鱿帧 ;看到“big endian”则可以理解为“高位字节先出现”。如果资料只写Endian而没有说明具体类型,它往往是在泛指“端序问题”,此时还需要结合上下文确认采用的是大端序还是小端序。

总的来说,Endian一词的核心含义就是“多字节数据的字节排列顺序”。Big-endian把高位字节放在前面,Little-endian把低位字节放在前面 ;理解这一点,就能读懂大多数与Endian、byte order和endianness相关的技术说明。

nqhpjzqzfgfaicmu49jtyujhnye
免责声明:本内容来自腾讯平台创作者,不代表腾讯新闻或腾讯网的观点和立场。

相关推荐

热门应用推荐

腾讯新闻·电脑版
全网热点早知道

精选视频

欢迎来龙餐馆 口碑

作者其他文章

?
顶部
【网站地图】