第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

將 uint32 的字節(jié)附加到字節(jié)切片?

將 uint32 的字節(jié)附加到字節(jié)切片?

Go
qq_笑_17 2023-07-17 16:46:28
如果我有一個現(xiàn)有的,向其[]byte附加一個或多個值的字節(jié)的推薦方法是什么?uint32例如,我應(yīng)該// ???用什么替換: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)),但是有沒有更慣用的方法來做到這一點(diǎn)?也許使用包二進(jìn)制和/或包字節(jié)?
查看完整描述

3 回答

?
長風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗 獲得超7個贊

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


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

二進(jìn)制包也可以按照問題所示使用:


var b [4]byte

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

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

在 Go 游樂場上運(yùn)行它。


最后一個片段應(yīng)該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


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

TA貢獻(xiàn)1784條經(jīng)驗 獲得超7個贊

編碼/二進(jìn)制具有您需要的功能:


import "encoding/binary"


b := make([]byte,4)

binary.LittleEndian.PutUint32(b, u)

s = append(s, b)


查看完整回答
反對 回復(fù) 2023-07-17
?
絕地?zé)o雙

TA貢獻(xiàn)1946條經(jīng)驗 獲得超4個贊

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


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


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


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


查看完整回答
反對 回復(fù) 2023-07-17
  • 3 回答
  • 0 關(guān)注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號