u16类型赋值0x1f是否等价于高8位存0x1f的0x1f00?
问题解答
常规赋值场景下不等价
直接给u16类型字段赋值0x1f时,逻辑数值就是十进制的31,对应的完整16位二进制为 00000000 00011111,也就是0x1f存储在低8位,高8位补0,逻辑值等于0x001f,和0x1f00完全不等。
什么情况下会出现你描述的结果
你提到的赋值后等于0x1f00的场景,只会出现在涉及**大端字节序(Big Endian)**的序列化操作中,而非直接赋值字面量的场景:
- 如果你是把u8类型的
0x1f写入一段2字节缓冲区的第一个字节,再以大端规则把缓冲区解析为u16类型,得到的结果才是0x1f00 - 举个代码示例:
let mut buf = [0u8; 2]; // 把0x1f写入缓冲区首字节 buf[0] = 0x1f; // 按大端规则解析为u16 let val = u16::from_be_bytes(buf); // 此时val的值就是0x1f00
这种场景是字节序转换的规则导致的,和直接给u16变量赋值字面量的逻辑完全不同。
内容的提问来源于stack exchange,提问作者Ti1
相关产品推荐
相关产品推荐

