我尝试在 Go 中实现以下布局。目前我可以弄清楚如何从字节 0 编码/设置位 6 和 7// Element ID flagbytesToSend[0] |= (1 << 7)//N/S Flag bytesToSend[0] |= (1 << 6)但是我不知道如何在 Go 中编码 20 位的“块号”。我确实认为阅读它我会做...block_num_out := ((int(bytesToSend[0]) & 0x0f) << 16) | (int(bytesToSend[1]) << 8) | (int(bytesToSend[2]))我尝试过的编码...block_num_in := 343348bytesToSend[0] |= block_num_in << 16但这给出了一个错误......invalid operation: bytesToSend[0] |= block_num_in << 16 (mismatched types byte and int)我也试过block_num_in := 343348bytesToSend[0] |= (byte(block_num_in) << 16) & 0x0fbytesToSend[1] |= byte(block_num_in) << 8bytesToSend[2] |= byte(block_num_in)有任何想法吗?谢谢!
1 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
书写时,必须使用相反的移位方向。由于block_num_in
是 type int
,您必须将结果转换为byte
:
bytesToSend[0] |= byte(block_num_in >> 16 & 0x0f) bytesToSend[1] = byte(block_num_in >> 8 & 0xff) bytesToSend[2] = byte(block_num_in)
此外,如果您必须做很多涉及步进字节边界的位功夫,请考虑使用github.com/icza/bitio
(披露:我是作者)。
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消