我在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
}
答案 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