如何将int转换为十六进制

时间:2017-11-15 08:16:22

标签: go

我在go:https://jeiwan.cc/posts/building-blockchain-in-go-part-2/中关注构建区块链的文章 当我研究第2部分时,我无法在prepareDate函数中运行代码。它总是会引发一个错误:

  

underfined:IntToHex。

这是我的代码:

    func (pow *ProofOfWork) prepareData(nonce int) []byte {

    data := bytes.Join(

     [][]byte{
            pow.block.PrevBlockHash,
            pow.block.Data,
            IntToHex(pow.block.Timestamp),
            IntToHex(int64(targetBits)),
            IntToHex(int64(nonce)),
        },
        []byte{},
    )

    return data
}

3 个答案:

答案 0 :(得分:3)

看起来那篇文章的作者从他/她的例子中留下了这个功能,或暗示读者自己编写。将整数表示为其base-16格式非常容易,可以使用标准库的strconv包来完成。以下是我认为适合您的计划的示例:

func IntToHex(n int64) []byte {
    return []byte(strconv.FormatInt(n, 16))
}

答案 1 :(得分:2)

您链接的文章包含完整source code

的网址 utils.go文件中的

是使用的IntToHex函数

package main

import (
    "bytes"
    "encoding/binary"
    "log"
)

// IntToHex converts an int64 to a byte array
func IntToHex(num int64) []byte {
    buff := new(bytes.Buffer)
    err := binary.Write(buff, binary.BigEndian, num)
    if err != nil {
        log.Panic(err)
    }

    return buff.Bytes()
}

答案 2 :(得分:0)

只需使用

s := fmt.Sprintf("%0x", 745658)
fmt.Println(s)
// Output: b60ba

https://play.golang.org/p/hrE2FnvvYH