28圈.com

may18_XXXXXL56endian到底是什么 搞懂字节序这块硬骨头就够了

may18_XXXXXL56endian到底是什么 搞懂字节序这块硬骨头就够了

先说结论:may18_XXXXXL56endian不是某个产品的型号,,,,,,,,也不是什么神秘代码,,,,,,,,它更像一串带日期的自界说标识符,,,,,,,,主题落在“endian」剽个推算机术语上。。 。。。 若是你在日志、配置文件或者某段代码里看到这串字符,,,,,,,,或许率是在描述一种数据体式,,,,,,,,跟字节存储挨次有关。。 。。。

今天就把“endian」剽块硬骨头掰开揉碎讲明显。。 。。。搞懂它,,,,,,,,你再看那些带奇怪后缀的字符串,,,,,,,,内心就有底了。。 。。。

字节序这事,,,,,,,,得从内存地址说起

推算机存储数据,,,,,,,,最幼的单元是字节(Byte)。。 。。。一个多字节的数据类型,,,,,,,,好比int类型占4个字节,,,,,,,,它在内存里怎么分列,,,,,,,,就是字节序要解决的问题。。 。。。

有两种排法:一种叫大端(Big-endian),,,,,,,,把高位字节放在低地址,,,,,,,,像人写字从左往右读,,,,,,,,切合直觉;; ;;;;另一种叫幼端(Little-endian),,,,,,,,把低位字节放在低地址,,,,,,,,刚好反过来,,,,,,,,好多x86架构的CPU默认用这个。。 。。。

举个例子,,,,,,,,数字0x12345678,,,,,,,,大端存成12 34 56 78,,,,,,,,幼端存成78 56 34 12。。 。。。就这点差距,,,,,,,,却能让分歧平台之间传输数据时出现“数字被读反”的狼狈。。 。。。?

前缀里的玄机,,,,,,,,藏着的可能是日期和批次

回到“may18_XXXXXL56」剽部门。。 。。。依照常见定名习惯,,,,,,,,“may18”或许率是May 18th,,,,,,,,也就是日期标注,,,,,,,,注明这条数据或者这个配置文件是5月18号天生的。。 。。。“XXXXXL56」剽一段,,,,,,,,更像一个随机批次号、版本标识,,,,,,,,或者某次构建的序列码。。 。。。

这种定名方式在好多公司的内部系统里很常见——用日期加随机串来分辨分歧版本或尝试组。。 。。。它不是尺度和谈里的器材,,,,,,,,更像某个开发者自己定的规定。。 。。。所以你在别处看到类似结构,,,,,,,,不用慌,,,,,,,,先猜日期,,,,,,,,再猜批次,,,,,,,,根基不会错。。 。。。?

为什么“endian”能卡住一批人

说真的,,,,,,,,好多法式跑起来没问题,,,,,,,,一到跨平台通讯就出bug,,,,,,,,十有八窘崆字节序没对齐。。 。。。举个最常见的场景:

两台服务器,,,,,,,,一台是x86幼端,,,,,,,,一台是PowerPC大端,,,,,,,,直接通过socket传一个结构体。。 。。。接管方拿到数据后愣是读不出正常数值——由于对方没做字节序转换,,,,,,,,整段数据在内存里是“倒着”的。。 。。。

解决思路也很明确:在写入网络流之前,,,,,,,,统一转成网络字节序(大端),,,,,,,,接管端再转回本机字节序。。 。。。 这就是ntohs、htonl这类函数存在的意思。。 。。。若是你在代码里看到这些函数,,,,,,,,注明原作者早就思考到了endian问题。。 。。。?

这类标识符在实战里怎么查

若是你是在日志文件或者报错信息里看到may18_XXXXXL56endian,,,,,,,,能够按下面挨次排查:

第一,,,,,,,,确认这是不是法式里写死的标识符。。 。。。搜一下代码库,,,,,,,,看这个字符串呈此刻哪些处所。。 。。。

第二,,,,,,,,确认高低文。。 。。。若是是网络和谈有关的字段,,,,,,,,沉点查抄收发双方的字节序设置;; ;;;;若是只是配置文件里的一个键名,,,,,,,,那“endian”可能只是个后缀标识,,,,,,,,注明这个配置项跟字节序有关。。 。。。

第三,,,,,,,,看文档。。 。。。好多开源库或中央件会在文德凤注明自己的数据体式,,,,,,,,这个标识符很可能就是某一版体式的代号。。 。。。?

处置多字节数据,,,,,,,,一个幼习惯能省大麻烦

其实不论这个字符串具体代表什么,,,,,,,,你只必要记住一条准则:所有跨平台传输的多字节数据,,,,,,,,都要显式申明字节序,,,,,,,,不要依赖默认行为。。 。。。

写代码的时辰,,,,,,,,用结构体传数据,,,,,,,,务必加pragma pack或者使用序列化库;; ;;;;手动解析二进造流,,,,,,,,用移位运算包办直接指针读取。。 。。。这些幼习惯能让你避开80%的endian坑。。 。。。

再说回may18_XXXXXL56endian自身,,,,,,,,若是你只是想知路它是什么——它或许就是个带日期和批次号的字节序象征。。 。。。具体寓意,,,,,,,,得看你是在哪个项目里遇见的。。 。。。?

字节序这玩意儿,,,,,,,,平时用不上,,,,,,,,一用就是关键节点。。 。。。搞懂它,,,,,,,,比背十个API都值。。 。。。

[责任编纂:王建国]

为您推荐

热点文章

杰出视频

凤凰资讯官方微信
凤凰资讯官方微信
关注更多资讯
【网站地图】【sitemap】