gpt4 book ai didi

go - 清除最高有效位

转载 作者:IT王子 更新时间:2023-10-29 02:33:21 26 4
gpt4 key购买 nike

我有一个包含两个字节的文件,按 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,但我无法得到它。我应该怎么做?

最佳答案

要使 n &= mask 起作用,nmask 必须是匹配类型。所以你应该写

mask := int16(^(1 << pos))

然后,value = clearBit(value, 15) 工作正常。

或者,由于常量是无类型的,您可以消除 mask,也可以消除对 n 的赋值,因为它只是在下一行返回,并缩短 clearBit

func clearBit(n int16, pos uint) int16 {
return n & ^(1 << pos)
}

关于go - 清除最高有效位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37970673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com