为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
偶然的你 2022-05-18 14:05:14
我尝试在 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(披露:我是作者)。


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信