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

TA貢獻1784條經驗 獲得超7個贊
編碼/二進制具有您需要的功能:
import "encoding/binary"
b := make([]byte,4)
binary.LittleEndian.PutUint32(b, u)
s = append(s, b)

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 這樣的地方應該提供所有可能的方法來實現人們在谷歌上搜索的東西。
- 3 回答
- 0 關注
- 149 瀏覽
添加回答
舉報