我嘗試在 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
(披露:我是作者)。
- 1 回答
- 0 關注
- 133 瀏覽
添加回答
舉報
0/150
提交
取消