小端架构下C#为何输出大端格式的十六进制数值?
字节序疑惑解答
一、01 5E对应350属于大端格式
字节序描述的是多字节数据在内存中的字节排列顺序:
- 大端(Big Endian):高位字节存放在内存地址较低的位置,低位字节存放在地址较高的位置。
- 小端(Little Endian):低位字节存放在内存地址较低的位置,高位字节存放在地址较高的位置。
350的十六进制值为0x015E,其中01是高位字节,5E是低位字节。当内存中存储的字节序列是01 5E(地址递增方向从左到右),读取时会将高位字节在前组合成数值,正好对应350,这符合大端模式的定义。
二、小端架构下C#输出15E的原因
你混淆了内存字节存储顺序和数值的十六进制字符串表示:
BitConverter.IsLittleEndian返回True,说明你的CPU在内存中存储多字节数据时采用小端模式。比如350作为int类型存储在内存中,字节序列是5E 01 00 00(int为4字节,高位补0)。x.ToString("X")的作用是将数值本身转换为十六进制字符串,它遵循人类读写数值的习惯——高位到低位书写,和内存中的字节存储顺序完全无关。350的数值本身就是0x015E,所以输出简化后的15E是正常的,和CPU的字节序没有关系。
简单来说:字节序管的是内存里字节怎么摆放,而数值的十六进制字符串是数值本身的符号化表示,和存储顺序无关。
内容的提问来源于stack exchange,提问作者Riley Varga
相关产品推荐
相关产品推荐

