登录
首页 >  Golang >  Go问答

在 Go 中对 20 位数字进行跨字节编码

来源:stackoverflow

时间:2024-03-20 09:21:31 381浏览 收藏

Go 语言中跨字节编码 20 位数字时,需要使用相反的移位方向,将 int 类型的值转换为 byte 类型。可以使用 github.com/icza/bitio 库简化此类位操作。

问题内容

我试图在 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

但这会产生错误...

in有效操作:bytestosend[0] |= block_num_in << 16(字节和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)

有什么想法吗?谢谢!


解决方案


书写时,必须使用相反的移位方向。由于 block_num_in 的类型为 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(披露:我是作者)。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《在 Go 中对 20 位数字进行跨字节编码》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>