我想将数字转换为十六进制,并将结果存储在长度为4的[]byte
中。
这是我想出来的,但感觉非常迂回。
package main
import (
"encoding/hex"
"fmt"
)
func main() {
hexstring := fmt.Sprintf("%x", 12345678)
fmt.Println(hexstring)
hexbytes, _ := hex.DecodeString(hexstring)
for {
if len(hexbytes) >= 4 {
break
}
hexbytes = append(hexbytes, 0)
}
fmt.Println(hexbytes)
}
我认为使用make([]byte, 4)
和encoding/binary
包必须有更好的方法来实现这一点,但我无法让它发挥作用。
答案 0 :(得分:2)
除非我误解了你的问题,否则根本不是十六进制。您希望采用32位整数,将其视为4个字节,并将这些字节放入[]byte
。
为此,您需要ByteOrder
包中的LittleEndian
类型(实际上是其子类型BigEndian
和encoding/binary
)。像这样:
package main
import (
"fmt"
"encoding/binary"
)
func main() {
x := 12345678
b := [4]byte{}
binary.LittleEndian.PutUint32(b[:], uint32(x))
fmt.Println(b)
}