猿问

在 Go 中跨字节编码 20 位数字

我尝试在 Go 中实现以下布局。


目前我可以弄清楚如何从字节 0 编码/设置位 6 和 7


// Element ID flag

bytesToSend[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 := 343348

bytesToSend[0] |= block_num_in << 16

但这给出了一个错误......


invalid operation: bytesToSend[0] |= block_num_in << 16 (mismatched types byte and int)


我也试过


block_num_in := 343348

bytesToSend[0] |= (byte(block_num_in) << 16) & 0x0f

bytesToSend[1] |= byte(block_num_in) << 8

bytesToSend[2] |= byte(block_num_in)

有任何想法吗?谢谢!

偶然的你
浏览 107回答 1
1回答

子衿沉夜

书写时,必须使用相反的移位方向。由于block_num_in是 type&nbsp;int,您必须将结果转换为byte:bytesToSend[0]&nbsp;|=&nbsp;byte(block_num_in&nbsp;>>&nbsp;16&nbsp;&&nbsp;0x0f) bytesToSend[1]&nbsp;=&nbsp;byte(block_num_in&nbsp;>>&nbsp;8&nbsp;&&nbsp;0xff) bytesToSend[2]&nbsp;=&nbsp;byte(block_num_in)此外,如果您必须做很多涉及步进字节边界的位功夫,请考虑使用github.com/icza/bitio(披露:我是作者)。
随时随地看视频慕课网APP

相关分类

Go
我要回答