金年会

每日经济新闻
要闻

每经网首页 > 要闻 > 正文

bigendian和littleendian-风行雪舞-博客园

陶德权 2025-11-01 23:39:55

每经编辑|闫尚    

当地时间2025-11-01,gfyuweutrbhedguifhkstebtj,少司缘没有小内没有小爱心的图片

序曲(qu):二进制的初(chu)相见,字节(jie)的(de)归属问题(ti)

想象(xiang)一下,您正在撰(zhuan)写一篇关(guan)于计(ji)算机网(wang)络(luo)的(de)小(xiao)说,其(qi)中一(yi)个(ge)章(zhang)节需(xu)要描述数(shu)据在网络(luo)上(shang)传(chuan)输(shu)的(de)过(guo)程。您会(hui)如何(he)组织您的(de)文字(zi)?是从第(di)一(yi)个字开始,还是(shi)从最(zui)后(hou)一个字开始?这看似简单的问题(ti),在计(ji)算机(ji)的(de)世(shi)界里却(que)是(shi)一个至(zhi)关(guan)重要且常(chang)常令人费(fei)解的技术(shu)难题:字节(jie)序(ByteOrder)。

在计算机(ji)内存中(zhong),数据是以字节(jie)(byte)为单位进行存(cun)储的。一个字节通常(chang)由8个二进(jin)制位(wei)(bit)组成。当我(wo)们要(yao)存储一个(ge)超过(guo)一个(ge)字(zi)节(jie)的(de)数(shu)据类型,比(bi)如一个32位的整数(通(tong)常(chang)由(you)4个字(zi)节(jie)组(zu)成)时,问题(ti)就来了:这(zhe)4个(ge)字(zi)节,到底应该按(an)照什么样的顺(shun)序排(pai)列在内存(cun)地(di)址(zhi)里呢?是(shi)最(zui)高有效字(zi)节(MostSignificantByte,MSB)在(zai)前,还(hai)是最低有(you)效字(zi)节(LeastSignificantByte,LSB)在(zai)前(qian)?

就像我(wo)们(men)阅读书(shu)籍,有(you)从(cong)左(zuo)到右,也有从右到左(zuo)的阅读习(xi)惯一(yi)样,不同(tong)的(de)处理(li)器架(jia)构对数据(ju)在内存(cun)中的(de)存(cun)储顺序有着不同的(de)偏(pian)好。这种(zhong)偏好(hao),就形成了(le)两种截(jie)然(ran)不(bu)同的字节(jie)序:BigEndian(大端(duan)序(xu))和(he)LittleEndian(小(xiao)端(duan)序(xu))。

BigEndian:庄(zhuang)重有(you)序的“大家(jia)闺秀(xiu)”

“BigEndian”这(zhe)个名字本身就(jiu)带(dai)有(you)一(yi)种“大(da)的(de)在前面(mian)”的意(yi)味。在(zai)BigEndian体系中,数(shu)据的最高(gao)有效字(zi)节(MSB)会被存储在(zai)内(nei)存(cun)中最低的(de)地址上,而(er)最(zui)低有(you)效字(zi)节(LSB)则存储在(zai)最高的(de)地址上。您(nin)可以(yi)将其想象成(cheng)我(wo)们(men)阅读(du)中(zhong)文书籍(ji)的(de)习惯(guan),从第(di)一个字开(kai)始(shi),一路(lu)向(xiang)后阅(yue)读。

例(li)如(ru),一(yi)个16进(jin)制表示(shi)的32位整数0x12345678。在BigEndian的内(nei)存(cun)布局中(zhong),它会被(bei)存储为(wei):

地(di)址0x1000:0x12(MSB)地址(zhi)0x1001:0x34地址(zhi)0x1002:0x56地址(zhi)0x1003:0x78(LSB)

这种(zhong)存储(chu)方(fang)式,在(zai)一(yi)定(ding)程(cheng)度(du)上(shang)使得数(shu)据的读取和(he)理解更加直观,因(yin)为(wei)它与我们(men)通常(chang)阅(yue)读(du)数(shu)字的(de)顺(shun)序(xu)是(shi)相符(fu)的。很多网络协(xie)议(如(ru)TCP/IP协议(yi)栈(zhan))在(zai)设计时就(jiu)采(cai)用(yong)了BigEndian作为其(qi)标准(zhun)字节序,这被称(cheng)为“网络字(zi)节序(xu)”(NetworkByteOrder)。

这(zhe)样(yang)做的好处是,在不(bu)同字节(jie)序的(de)机器之间(jian)进(jin)行(xing)网络通信(xin)时(shi),可(ke)以(yi)通(tong)过统一(yi)的转换规则(ze)来确保数据的(de)正确解(jie)析。这就(jiu)像大(da)家约(yue)定好(hao),无论大家平时(shi)说话(hua)的(de)语(yu)速(su)快(kuai)慢,一到(dao)会议上(shang),都(dou)得按照(zhao)规定流程(cheng)来发言,这(zhe)样(yang)才(cai)能(neng)保(bao)证(zheng)会议的(de)顺(shun)畅进行(xing)。

LittleEndian:灵活变(bian)通(tong)的“小家碧玉”

与(yu)BigEndian的“大(da)者在(zai)前(qian)”形(xing)成鲜明(ming)对(dui)比的是(shi)LittleEndian。在(zai)LittleEndian体系中,数(shu)据(ju)的(de)最(zui)低有效字节(jie)(LSB)被存储在(zai)内存中(zhong)最(zui)低的地址(zhi)上(shang),而最高(gao)有效(xiao)字(zi)节(jie)(MSB)则存储在(zai)最高(gao)的(de)地(di)址上(shang)。这(zhe)就像我们有(you)时候(hou)会把(ba)一些重要(yao)的(de)信(xin)息放(fang)在后面(mian),或者按照一(yi)种“反向”的(de)逻辑来排列。

同样是(shi)0x12345678这(zhe)个(ge)32位(wei)整(zheng)数,在LittleEndian的(de)内(nei)存(cun)布局(ju)中,它(ta)会被存(cun)储(chu)为:

地址(zhi)0x1000:0x78(LSB)地址(zhi)0x1001:0x56地址0x1002:0x34地址0x1003:0x12(MSB)

这种存储(chu)方(fang)式(shi),虽(sui)然(ran)初看起来(lai)有些(xie)“反直觉”,但(dan)在某些处理(li)器架构(gou)(如x86系列(lie)的(de)Intel和AMD处理器(qi))的(de)设(she)计中(zhong),它能够带来一(yi)些性能(neng)上(shang)的优势。例(li)如,当需要(yao)访问(wen)一(yi)个数(shu)据(ju)的低(di)位字节时(shi),可以直接访问(wen)最低地址,而(er)无需进行地址偏移的(de)计(ji)算(suan)。这(zhe)就像在(zai)一(yi)个(ge)文(wen)件(jian)柜(gui)里,您最常用(yong)的文件(jian)总是放(fang)在最容(rong)易(yi)拿到(dao)的第一(yi)层(ceng)抽屉(ti)里,而(er)不(bu)是(shi)藏在最(zui)里面,这样取(qu)用起(qi)来更快(kuai)捷。

“风行雪舞”的起(qi)源:处理(li)器架构(gou)的抉择

为(wei)什么(me)会有这(zhe)两(liang)种不(bu)同的字(zi)节序呢(ne)?这(zhe)很大(da)程(cheng)度上源(yuan)于(yu)计(ji)算机处(chu)理器在设(she)计之(zhi)初(chu)的权(quan)衡与选(xuan)择。

早期的处(chu)理(li)器设(she)计,如(ru)摩托罗拉的68000系(xi)列和(he)IBM的PowerPC系(xi)列,倾向(xiang)于采用BigEndian。这或(huo)许与(yu)它们在某些(xie)领(ling)域的应(ying)用(yong)场景(jing)有关(guan),比(bi)如在网(wang)络通信和(he)某些(xie)高(gao)性(xing)能计算领(ling)域,BigEndian的(de)直观(guan)性更容易(yi)被(bei)接(jie)受。

而(er)Intel的x86架(jia)构(gou),自(zi)其诞(dan)生以来就(jiu)一(yi)直(zhi)是LittleEndian的(de)拥趸。这种(zhong)选择(ze),在(zai)当时(shi)可(ke)能更(geng)多地是出(chu)于对(dui)硬(ying)件实现(xian)复杂度、成本以(yi)及(ji)性(xing)能的(de)考量(liang)。随着x86架构(gou)在(zai)全(quan)球个(ge)人电(dian)脑市(shi)场的(de)巨大(da)成(cheng)功,LittleEndian也成(cheng)为(wei)了更(geng)为(wei)普遍的字节序(xu)之一,尤其(qi)是(shi)在(zai)桌面和服(fu)务(wu)器(qi)领域(yu)。

这(zhe)种(zhong)“风行(xing)雪舞(wu)”的局(ju)面,就此奠(dian)定。在(zai)不同(tong)的处(chu)理(li)器(qi)上,我(wo)们(men)都能看(kan)到它(ta)们各自独特的(de)字节序(xu)“舞姿(zi)”。而对于开(kai)发者(zhe)来说,理(li)解并处理(li)好这两(liang)种字节(jie)序,是编写(xie)跨平(ping)台、健(jian)壮程(cheng)序的(de)基(ji)石(shi)。

在博客园(yuan)这样的(de)技术社区中,“风(feng)行(xing)雪舞(wu)”这个(ge)词,或许(xu)不(bu)仅仅是(shi)对(dui)字节(jie)序(xu)两(liang)种形态的(de)比喻,更(geng)是(shi)对开(kai)发者(zhe)在技(ji)术海(hai)洋中不断(duan)探(tan)索(suo)、解决难题(ti),直(zhi)至(zhi)最终掌(zhang)握核心(xin)技术(shu)的(de)生动写照。每一(yi)个(ge)问题的背(bei)后,都(dou)可能隐藏(cang)着一段关(guan)于(yu)选(xuan)择(ze)、优(you)化和(he)创新的故(gu)事。而(er)我们(men),作(zuo)为(wei)技术(shu)的参(can)与者(zhe),也(ye)正(zheng)是在(zai)这样的“风(feng)行雪(xue)舞”中,不(bu)断(duan)学习(xi)和(he)成长。

part1到此结(jie)束,接下来(lai)我们将(jiang)进(jin)入part2,更(geng)深入(ru)地探讨这(zhe)两种字(zi)节(jie)序的(de)实际应用(yong)和潜(qian)在(zai)的挑(tiao)战(zhan)。

传承(cheng)与碰撞:字(zi)节序在实际(ji)应用中的风(feng)行雪舞

上(shang)一部分,我们描绘了BigEndian和(he)LittleEndian在二(er)进(jin)制世(shi)界中(zhong)的基本形态(tai),如同两(liang)种(zhong)截然(ran)不(bu)同的(de)舞蹈风格,各自(zi)在处(chu)理(li)器(qi)架构(gou)中占据一席之(zhi)地。技(ji)术世界并(bing)非(fei)孤(gu)岛,数(shu)据的(de)流动(dong)与交(jiao)换是(shi)常态。当(dang)这(zhe)两种(zhong)“舞姿”在(zai)跨(kua)越不(bu)同平(ping)台的“舞(wu)池(chi)”中(zhong)相(xiang)遇时(shi),一场(chang)关于(yu)数(shu)据正(zheng)确性的“风行(xing)雪舞”便正(zheng)式上演。

网络(luo)通信的(de)“通用(yong)语(yu)言(yan)”:为什么需(xu)要(yao)网络字节序(xu)?

想(xiang)象(xiang)一(yi)下,您用(yong)一台运(yun)行x86(LittleEndian)的(de)电(dian)脑发送(song)一封邮(you)件(jian),而(er)接(jie)收邮件(jian)的服务(wu)器运行(xing)着一个(ge)采(cai)用PowerPC(BigEndian)的系统。如果(guo)发送(song)方直(zhi)接将内存(cun)中(zhong)的(de)数据原封(feng)不动地发(fa)送出(chu)去(qu),接收方(fang)可能(neng)会(hui)因为误读字(zi)节顺序(xu)而(er)导致(zhi)邮件内容(rong)混(hun)乱(luan)不堪,甚至无(wu)法(fa)解析。

为了(le)解决(jue)这(zhe)个(ge)问题,计(ji)算机网络(luo)协(xie)议设计者们引入了(le)“网络字节序(xu)”(NetworkByteOrder)的概念(nian),并通常(chang)将(jiang)其定义(yi)为(wei)BigEndian。这意(yi)味着(zhe),当数据在(zai)网络(luo)上传输之(zhi)前,无(wu)论(lun)是BigEndian还是LittleEndian的机器(qi),都(dou)需要(yao)将(jiang)数(shu)据(ju)转(zhuan)换为(wei)网络(luo)字(zi)节(jie)序;而(er)在接收到数据(ju)之后,再(zai)根(gen)据自身系(xi)统的(de)字节(jie)序将(jiang)其转换回(hui)来(lai)。

在(zai)C语言中,提(ti)供(gong)了htons(hosttonetworkshort)、htonl(hosttonetworklong)、ntohs(networktohostshort)、ntohl(networktohostlong)等函(han)数来帮助开发(fa)者(zhe)进行这(zhe)种(zhong)字节序的(de)转换(huan)。

htons:将(jiang)主机(ji)字节序(HostByteOrder)的16位短(duan)整(zheng)型(xing)数据(ju)转换(huan)为网络字节序。htonl:将主机(ji)字节序(xu)的32位长整型数(shu)据转换(huan)为网(wang)络字节序。ntohs:将网络(luo)字节序的16位(wei)短整型数据(ju)转换为主(zhu)机字(zi)节序(xu)。ntohl:将网(wang)络字节(jie)序(xu)的32位(wei)长(zhang)整型数(shu)据转换为主机(ji)字节序。

这(zhe)里的(de)“主机字节(jie)序”就是指(zhi)当前机器(qi)所(suo)使用的字节(jie)序(可(ke)能是BigEndian,也(ye)可(ke)能是LittleEndian)。通(tong)过这些函(han)数,不(bu)同(tong)字(zi)节(jie)序的机(ji)器(qi)就能(neng)够像使(shi)用同一(yi)种“通用(yong)语(yu)言”一(yi)样,顺畅地进行(xing)数据交(jiao)流,确(que)保网(wang)络通信的可(ke)靠性(xing)。这(zhe)如(ru)同在(zai)国际会议上,大(da)家都会(hui)先(xian)将各(ge)自的(de)语(yu)言翻译成英(ying)语,再(zai)进(jin)行(xing)交流,避(bi)免了语(yu)言(yan)不(bu)通造成的(de)隔阂。

嵌(qian)入(ru)式系(xi)统与低功耗的(de)“秘密武器”

在嵌(qian)入(ru)式(shi)系统领域(yu),LittleEndian同样(yang)扮演着(zhe)重(zhong)要的(de)角色。许多广泛(fan)使用的(de)微(wei)控制器,如(ru)ARMCortex-M系列(在(zai)很(hen)多(duo)智能设(she)备(bei)、物联(lian)网(wang)设(she)备(bei)中非(fei)常常(chang)见),默(mo)认支持LittleEndian字(zi)节序(xu)。

LittleEndian在嵌(qian)入式(shi)系统(tong)中(zhong)的受(shou)欢(huan)迎,与(yu)其在(zai)某些(xie)操(cao)作(zuo)上(shang)的效(xiao)率优势(shi)息息相关。例如(ru),当我(wo)们需(xu)要访(fang)问一(yi)个多字节(jie)整(zheng)数(shu)的最低字节(jie)时(shi),LittleEndian架构(gou)可以(yi)直接(jie)通过最低(di)的内存地址访(fang)问,而无需(xu)进行(xing)额外的地(di)址(zhi)计(ji)算。这(zhe)对(dui)于(yu)资源(yuan)受限、对功耗和(he)处理(li)速度有极(ji)高(gao)要(yao)求(qiu)的(de)嵌入(ru)式设备来(lai)说,每(mei)一个(ge)微小的优(you)化都至关重要(yao)。

在嵌(qian)入式(shi)开发(fa)中,数(shu)据(ju)的持久化存储(chu)(例如(ru)存(cun)储(chu)到闪存(cun)或EEPROM中)也(ye)需要考虑字(zi)节序(xu)问题。如果(guo)一个嵌入(ru)式(shi)设(she)备(bei)需要与其他系统(tong)交换数据,或者其存储的(de)数据需要在不(bu)同类(lei)型(xing)的(de)设备(bei)上被(bei)读取,那(na)么(me)明确(que)定(ding)义(yi)和处(chu)理数(shu)据(ju)的字(zi)节(jie)序(xu)就(jiu)变得尤为(wei)重(zhong)要(yao)。

跨平台开(kai)发(fa)的(de)“潜在陷(xian)阱”

尽管现(xian)代(dai)操作(zuo)系统和(he)编(bian)程语言在一(yi)定程度(du)上封装(zhuang)了(le)字节序的细(xi)节(jie),但(dan)对(dui)于开发(fa)者(zhe)来说(shuo),理解(jie)字节序仍(reng)然是编(bian)写(xie)健壮(zhuang)、跨(kua)平(ping)台代码的(de)关(guan)键。尤(you)其(qi)是在以下(xia)场景,开发(fa)者需要(yao)格外(wai)小(xiao)心:

文件I/O:当读写(xie)二进制文件时(shi),如果文(wen)件以特(te)定的(de)字节(jie)序创(chuang)建,而读取程序(xu)使(shi)用的字节序不同,就会导致(zhi)数据(ju)解(jie)析错误(wu)。例如(ru),一个在LittleEndian系(xi)统上生(sheng)成的配(pei)置文(wen)件(jian),如(ru)果被(bei)BigEndian系统读(du)取,其中(zhong)的(de)数(shu)值(zhi)可(ke)能(neng)就(jiu)完全错了。

内存(cun)映射(MemoryMapping):当将(jiang)文件(jian)或设备内存映射到(dao)进程(cheng)地址(zhi)空间时(shi),如(ru)果涉及到(dao)不同字节(jie)序的(de)系统(tong),需要(yao)确(que)保(bao)映射(she)的数(shu)据被正(zheng)确(que)解释(shi)。序列化与反序(xu)列(lie)化:在网络通(tong)信、分布式系统或持(chi)久(jiu)化存储(chu)中,数(shu)据的序列(lie)化(将(jiang)内(nei)存中(zhong)的数据(ju)结构转换(huan)为可(ke)传输(shu)或可(ke)存储的(de)格式)和(he)反(fan)序列化(hua)(反之(zhi))过程,都需要(yao)明(ming)确的字(zi)节序处(chu)理(li)。

“风行雪舞”的(de)未来:趋同(tong)与共(gong)存

在(zai)技(ji)术(shu)发展(zhan)的长河(he)中,我(wo)们(men)可以(yi)看到一种(zhong)有趣的(de)趋势:虽(sui)然BigEndian和(he)LittleEndian各有(you)优势,但为了兼(jian)容性(xing)和便(bian)利性,许(xu)多(duo)处理器和(he)系统(tong)都增加(jia)了(le)对两(liang)种字节序的支(zhi)持。例(li)如(ru),一(yi)些(xie)ARM处(chu)理器可以配置(zhi)为BigEndian或LittleEndian工作模式(shi)。

这(zhe)种“趋同”的趋(qu)势,使(shi)得(de)开发者在选(xuan)择(ze)平台(tai)时(shi)拥有(you)了(le)更大的(de)灵(ling)活性。正如“风(feng)行雪舞(wu)”所(suo)展现(xian)的那样(yang),即使(shi)在(zai)趋同的背(bei)景下(xia),理解这两种(zhong)截然(ran)不(bu)同的(de)“舞姿(zi)”及其背(bei)后(hou)的逻(luo)辑(ji),依(yi)然是每一(yi)位深(shen)入探(tan)索计(ji)算机(ji)科学的(de)“舞(wu)者”所必须掌握(wo)的技能(neng)。

在博客(ke)园,我们看(kan)到的(de)“风行雪舞”,不仅(jin)仅(jin)是对技(ji)术概念的(de)生动比喻(yu),更是对(dui)开(kai)发者(zhe)们(men)在(zai)学习(xi)、实践(jian)、解决(jue)技术(shu)难题(ti)过程中所展现出的智慧与坚持的(de)赞扬。每一(yi)次(ci)对字(zi)节序的深入理解(jie),每(mei)一(yi)次对跨(kua)平台(tai)问(wen)题的(de)有效解决,都像是这(zhe)场“风行雪舞”中(zhong)一次(ci)成功的旋转和(he)跳跃(yue),为我们的(de)技术之(zhi)路增添了更(geng)多的色(se)彩(cai)与可(ke)能。

无论是BigEndian的一(yi)丝不苟,还(hai)是LittleEndian的(de)灵活高(gao)效(xiao),它们都(dou)在各自(zi)的领(ling)域(yu)里,以独(du)特的方(fang)式(shi),参与(yu)着这场(chang)永(yong)不停歇的(de)“字节舞”,共(gong)同构成(cheng)了(le)我们今天所(suo)见的(de)丰(feng)富多(duo)彩的(de)数字(zi)世(shi)界。而(er)我们,作(zuo)为这(zhe)场舞蹈(dao)的(de)观察者(zhe)与参与(yu)者,正(zheng)是在(zai)不断(duan)学习(xi)和(he)探索中,领(ling)略这场“风行(xing)雪舞”的无穷魅力。

2025-11-01,卡在墙里的女孩电影免费观看,南新制药,拟重大资产重组!不停牌

1.梁佳芯电影大全,西藏药业上半年净利5.67亿元,同比下降8.96%成人版one一个色板官网,加拿大宣布取消多项针对美国商品的报复性关税

图片来源:每经记者 陈小历 摄

2.www.com黄游+日逼艺术,2025年基金中报划重点!泓德基金季宇:看好中国消费企业的长期投资机会

3.周晓琳超长精华版33部+想要导航御用提示页网站推广,新能源汽车测试新品发布——低压电机模拟器

八哥黑料+秘密入口3秒自动转接连接解锁网络奇妙之门,PCB概念股持续拉升,强瑞技术“20cm”涨停

大咪咪DVD久久综合在线视频-不卡顿

封面图片来源:图片来源:每经记者 名称 摄

如需转载请与《每日经济新闻》报社联系。
未经《每日经济新闻》报社授权,严禁转载或镜像,违者必究。

读者热线:4008890008

特别提醒:如果我们使用了您的图片,请作者与本站联系索取稿酬。如您不希望作品出现在本站,可联系金年会要求撤下您的作品。

欢迎关注每日经济新闻APP

每经经济新闻官方APP

0

0

Sitemap