从十进制转换为十六进制

时间:2012-06-13 12:38:56

标签: encoding hex go

我想将数字转换为十六进制,并将结果存储在长度为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包必须有更好的方法来实现这一点,但我无法让它发挥作用。

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

1 个答案:

答案 0 :(得分:2)

除非我误解了你的问题,否则根本不是十六进制。您希望采用32位整数,将其视为4个字节,并将这些字节放入[]byte

为此,您需要ByteOrder包中的LittleEndian类型(实际上是其子类型BigEndianencoding/binary)。像这样:

package main

import (
"fmt"
"encoding/binary"
)

func main() {

    x := 12345678
    b := [4]byte{}
    binary.LittleEndian.PutUint32(b[:], uint32(x))
    fmt.Println(b)
}