我嘗試在 Go 中實(shí)現(xiàn)以下布局。目前我可以弄清楚如何從字節(jié) 0 編碼/設(shè)置位 6 和 7// Element ID flagbytesToSend[0] |= (1 << 7)//N/S Flag bytesToSend[0] |= (1 << 6)但是我不知道如何在 Go 中編碼 20 位的“塊號(hào)”。我確實(shí)認(rèn)為閱讀它我會(huì)做...block_num_out := ((int(bytesToSend[0]) & 0x0f) << 16) | (int(bytesToSend[1]) << 8) | (int(bytesToSend[2]))我嘗試過(guò)的編碼...block_num_in := 343348bytesToSend[0] |= block_num_in << 16但這給出了一個(gè)錯(cuò)誤......invalid operation: bytesToSend[0] |= block_num_in << 16 (mismatched types byte and int)我也試過(guò)block_num_in := 343348bytesToSend[0] |= (byte(block_num_in) << 16) & 0x0fbytesToSend[1] |= byte(block_num_in) << 8bytesToSend[2] |= byte(block_num_in)有任何想法嗎?謝謝!
1 回答

子衿沉夜
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
書(shū)寫(xiě)時(shí),必須使用相反的移位方向。由于block_num_in
是 type int
,您必須將結(jié)果轉(zhuǎn)換為byte
:
bytesToSend[0] |= byte(block_num_in >> 16 & 0x0f) bytesToSend[1] = byte(block_num_in >> 8 & 0xff) bytesToSend[2] = byte(block_num_in)
此外,如果您必須做很多涉及步進(jìn)字節(jié)邊界的位功夫,請(qǐng)考慮使用github.com/icza/bitio
(披露:我是作者)。
- 1 回答
- 0 關(guān)注
- 132 瀏覽
添加回答
舉報(bào)
0/150
提交
取消