【发布时间】:2021-01-22 22:10:00
【问题描述】:
我有一个包含两个字节的文件,按照 Big Endian 顺序,hexdump 给了我:
81 50
这是二进制的1000 0001 0101 0000。但是,我希望最高位是一个标志,所以在 golang 中我必须加载文件内容,清除最高位,然后才读取值。
所以:
valueBuf := make([]byte, 2)
_, err := f.Read(valueBuf) // now printing valueBuf gives me [129 80] in decimal
value := int16(binary.BigEndian.Uint16(valueBuf[0:2])) // now value is -32432
好的,我尝试过使用类似的东西:
func clearBit(n int16, pos uint) int16 {
mask := ^(1 << pos)
n &= mask
return n
}
但它显然没有按预期工作。输出值应该是十进制的336,作为普通的int,我无法得到它。我该怎么做?
【问题讨论】:
-
最低有效 15 位的格式是什么?它们可以是负数,还是未签名?
-
是的,读给我听就像你可能想要
uint16。我猜你可能会分离示例代码的步骤,但我也只是将encoding.Read直接放入uint16,而不是单独读取和转换。