亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 uint32 的字節附加到字節切片?

將 uint32 的字節附加到字節切片?

Go
qq_笑_17 2023-07-17 16:46:28
如果我有一個現有的,向其[]byte附加一個或多個值的字節的推薦方法是什么?uint32例如,我應該// ???用什么替換:s := []byte{0x00, 0x01, 0x02, 0x03}u := uint32(0x07060504)// ???fmt.Println(s)? // Should print [0 1 2 3 4 5 6 7]編輯:一種選擇是s = append(s, byte(u)); s = append(s, byte(u >> 8)); s = append(s, byte(u >> 16)); s = append(s, byte(u >> 24)),但是有沒有更慣用的方法來做到這一點?也許使用包二進制和/或包字節?
查看完整描述

3 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

一種選擇是按照問題中的建議附加各個字節。多個append調用可以合并為一個調用:


s = append(s, byte(u), byte(u>>8), byte(u>>16), byte(u>>24))

二進制包也可以按照問題所示使用:


var b [4]byte

binary.LittleEndian.PutUint32(b[:], u)

s = append(s, b[:]...)

在 Go 游樂場上運行它。


最后一個片段應該b在堆棧上分配。如果沒有,則可以使用以下代碼避免額外的堆分配:


s = append(s, "    "...) // append four bytes (the values don't matter)

binary.LittleEndian.PutUint32(s[len(s)-4:], u) // overwrite those bytes with the uint32


查看完整回答
反對 回復 2023-07-17
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

編碼/二進制具有您需要的功能:


import "encoding/binary"


b := make([]byte,4)

binary.LittleEndian.PutUint32(b, u)

s = append(s, b)


查看完整回答
反對 回復 2023-07-17
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

有不安全的(實際上是安全的,如果你只復制它的字節)方法來獲取任何原語的字節表示:


const sizeUInt32 = int(unsafe.Sizeof(uint32(0)))


func GetBytesUInt32(i *uint32) []byte {

   return (*[1 << 30]byte)(unsafe.Pointer(i))[:sizeUInt32:sizeUInt32]

}

https://play.golang.org/p/WPC5jeYLDth


創建的切片將攜帶傳遞的 int 存儲,因此通過對其進行操作,請記住 uint32 值也將被更改。


嘿,沒有討論怎么討厭?我意識到你們不喜歡不安全的代碼,而且我意識到這樣的答案不適合recommended way哪個主題啟動器尋找......但我認為像 stackoverflow 這樣的地方應該提供所有可能的方法來實現人們在谷歌上搜索的東西。


查看完整回答
反對 回復 2023-07-17
  • 3 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號