Stake官网

Endian一词是什么意思:推算机中的字节序诠释

Endian 是推算机领域中暗示“字节分列挨次”的术语,中文通常译为端序或字节序。当一个数据由多个字节组成时,Endian 用来注明这些字节在内存、文件或网络数据中的先后地位。最常见的两种大局是 Big Endian(大端序)和 Little Endian(幼端序)。

单一来说,Endian 不是在注明一个数“是几多”,而是在注明这个数的分歧字节“怎么排”。统一个整数在大端和幼端中代表的数值能够齐全一样,只是它在内存或数据流中的分列方式分歧。因而,看到 endian 这个词时,通常要持续确认它指的是 big endian 还是 little endian。

Endian到底是什么意思 ?

推算机通常以字节为单元处置数据,一个字节蕴含 8 个二进造位。像字符这样的数据可能只占一个字节,但整数、浮点数、功夫戳和内存地址等数据,往往由 2 个、4 个或更多字节组成。

例如,十六进造数 0x12345678 由四个字节组成:

  • 0x12:最高有效字节
  • 0x34:次高有效字节
  • 0x56:次低有效字节
  • 0x78:最低有效字节

Endian 关注的就是这四个字节在陆续存储空间中的分列挨次。这里的“高”与“低”指的是数值权沉,不是内存地址凹凸,也不是字节在屏幕上的高低地位。

为什么统一个数会有大端和幼端两种分列方式 ?

由于多字节数据必要被拆分后放入陆续的字节地位,而分歧处置器、操作系统或数据体式能够选取分歧的约定。如果内存地址从低到高顺次增长,数值 0x12345678 的分列能够暗示为:

统一个数在两种端序中的字节分列
端序 低地址到高地址的字节挨次 分列特点
大端序 Big Endian 12 34 56 78 最高有效字节放在低地址
幼端序 Little Endian 78 56 34 12 最低有效字节放在低地址

大端序的分列方式与人们书写十六进造数字的挨次更靠近:先看到最高位,再看到最低位。幼端序则把最低有效字节放在最前面。无论选取哪种分列,沉新依照对应规定读取后,得到的数值依然是 0x12345678。

“Big Endian”和“Little Endian」剽两个名称,通常被以为与文学文章中关于“大端剥蛋”与“幼端剥蛋”的争论有关。后来,这组说法被推算机领域借来描述数据分列挨次。这里的“端”不是数据的一端被截断,而是指一个多字节数据从哪一端起头分列。

Endian和字节序、位序是一回事吗 ?

在大无数技术文档中,Endian 重要会商的是字节序,也就是多个字节之间的挨次。因而,“Endian”“端序”和“字节序”时时被当作近似同义词使用。不外,Endian 不应直接等同于位序。

字节序关注字节之间的挨次

以 0x1234 为例,它由 0x12 和 0x34 两个字节组成。大端序通常写为 12 34,幼端序通常写为 34 12。这里变动的是两个字节的排各地位。

位序关注一个字节内部的位若何诠释

一个字节 0x12 内部还蕴含 8 个二进造位。会商这些位在寄放器、总线或通讯和谈中的传输挨次时,涉及的是位序、位编号方式或比特传输挨次。它与大端、幼端的字节分列不是统一个问题。

因而,看到某个资料说“选取幼端”,通常只能先理解为“多字节数据按幼端字节序排劣妆,不能据此揣度每个字节内部的比特肯定依照某种物理方向传输。

什么时辰必须分辨 Endian ?

若是数据只在统一法式、统一运行环境中使用,法式通�;嵋勒盏鼻捌教ǖ墓娑ㄊ迪侄列�,开发者不定必要直接观察每个字节。但在以下情况下,Endian 就会成为必须明确的概想:

  • 读取二进造文件:文件体式可能划定整数、长度字段或偏移量选取大端或幼端。若是读取法式使用了相反规定,数值就会被解析谬误。
  • 网络通讯:很多互联网和谈中的整数选取约定好的网络字节序,常见网络字节序为大端序。发送端和接管端必要遵循和谈划定,而不能只按本机习惯处置。
  • 跨平台互换数据:分歧处置器或系统可能使用分歧的默认端序,数据体式若是没有明确划定端序,就容易出现兼容问题。
  • 挪用表部接口:法式与设备、操作系统接口或其他说话互换二进造结构体时,字段的字节排劣注长度和对齐方式都可能影响了局。
  • 查看内存和调试数据:调试器展示的字节序列与源代码中的整数写法可能分歧,理解端序有助于判断内存中的原始内容。

判断时能够先问两个问题:第一,数据是否由多个字节组成;第二,数据是否必要在分歧法式、平台或设备之间互换。若是只是处置单个字节,例如一个 0 到 255 的数值,通常不存在大端或幼端的区别;若是是 16 位、32 位或 64 位数据,就必要确认分列规定。

Endian和“数字写法”为什么看起来不一样 ?

人们书写 0x12345678 时,通常从左到右依照最高位到最低位分列。这是数字的暗示法。内存则是按地址保留一个个字节,地址从低到高分列时,具体先放哪个字节由端序决定。

因而,法式员在源代码中看到的数字挨次,并不愿定蹬宗内存查看工具显示的字节挨次。好比幼端机械上,变量的值依然能够写作 0x12345678,但从低地址起头查看原始内存时,可能顺次看到 78、56、34、12。两者并不矛盾:前者是在表白数值,后者是在展示存储布局。

同样,文本内容也不能单一按“字符串是大端还是幼端”来理解。通常单字节字符通常不存在这种字节分列问题;某些多字节字符编码或编码文件体式可能划定端序,这时要依照具体编码和文件规范判断,而不能仅凭“文字由多个字节组成”就直接套用大幼端结论。

看到 Endian 时应该若何理解 ?

能够把它概括为一句话:Endian 描述的是多字节数据中,各个字节依照什么挨次存放或传输。若是资料写的是 Big Endian,通常暗示最高有效字节在前;若是写的是 Little Endian,通常暗示最低有效字节在前。

现实阅读文档时,还应结合数据的天堑和规定一路看:字段占几个字节、低地址若何界说、和谈是否指定网络字节序、文件头是否蕴含端序象征,以及读取方是否必要进行字节互换。只有在这些前提明确后,能力正确判断一串十六进造字节代表什么数值。

ly3s7ofyblpq9j8coqlgs3uae09873
免责申明:本内容来自腾讯平台创作者,不代表腾讯新闻或腾讯网的概想和态度。

有关推荐

热点利用推荐

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

精选视频

7&i正式销售伊藤洋华堂等非主题业务

作者其他文章

?
顶部
【网站地图】