gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 20:27:00 24 4
gpt4 key购买 nike

我尝试在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)

有任何想法吗?谢谢!

bytes layout

最佳答案

书写时,必须使用相反的移动方向。由于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 - 在Go中跨字节编码20位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60315778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com