0

我想将一个数字转换为十六进制并将结果存储在[]byte最长为 4 的长度中。这是我想出的,但感觉很迂回。

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包来做到这一点,但我无法让它工作。

沙盒链接:http ://play.golang.org/p/IDXCatYQXY

4

1 回答 1

2

除非我误解了你的问题,否则它根本不是关于十六进制的。您想取一个 32 位整数,将其视为 4 个字节,然后将这些字节放入[]byte.

为此,您需要包中的ByteOrder类型(实际上是它的子类型LittleEndianBigEndianencoding/binary。像这样的东西:

package main

import (
"fmt"
"encoding/binary"
)

func main() {

    x := 12345678
    b := [4]byte{}
    binary.LittleEndian.PutUint32(b[:], uint32(x))
    fmt.Println(b)
}
于 2012-06-13T12:58:15.213 回答