2017-11-15 9 views
-3

私は移動中にブロックチェーンを構築する記事に従います:https://jeiwan.cc/posts/building-blockchain-in-go-part-2/ パート2を調べると、prepareDate関数でコードを実行できません。これは私のコードであるintを16進数に変換する方法

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 
} 
+1

を使用していますが、自分でその関数を実装する必要があるように見えます。おそらく、これは参考になります:https://stackoverflow.com/questions/33581426/how-can-i-convert-from-int-to-hex-in-golang/33581477 – Hexaholic

答えて

1

は、リンク先の記事では、ファイルutils.goでフルsource code

へのURLが含まれてい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() 
} 
+3

WTFはこれですか?これは、ビッグエンディアン形式を使用して 'int64'値を一連のバイトに直列化します。そこに "hex"はありません。これは、変換のために基数16を使って整数の文字列*表現を意味するように統一されています。 (私はあなたを責めるわけではないが、これは指摘する価値があることに注意してください)。 – kostix

+1

私はあなたに完全に同意しました、これはこの関数にとっては本当に悪い名前でした – grabthefish

3

この記事の著者のように見えますその機能を彼/彼女の例から除外したか、または読者が自分自身を書くことを暗示した。 16進形式の整数を表すのは簡単で、標準ライブラリのstrconvパッケージを使用して行うことができます。ここで私はあなたのプログラムに合うと考えている1の下の例です:

func IntToHex(n int64) []byte { 
    return []byte(strconv.FormatInt(n, 16)) 
} 
関連する問題