在这里按位操作和 Go 新手:DI 正在使用 Go 从传感器读取一些数据,我将其作为 2 个字节 - 假设0xFFFE
。将其转换为 uint16 也很容易,因为在 Go 中我们可以这样做uint16(0xFFFE)
,但我需要将其转换为整数,因为传感器实际上返回的值范围从 -32768 到 32767。现在我想“也许 Go 会是这个很好,如果我这样做int16(0xFFFE)
,它会明白我想要什么?” , 但不是。我最终使用了以下解决方案(我从网上翻译了一些 python 代码):
x := 0xFFFE
if (x & (1 << 15)) != 0 {
x = x - (1<<16)
}
它似乎有效,但是 A)我不完全确定为什么,并且 B)对于我想象的将 uint16 转换为 int16 的简单解决方案来说,它看起来有点难看。谁能帮我解释一下为什么这是唯一的方法?或者还有其他可能的方法吗?