16進数で表しても5です。次に結果をマスクします。マスクはAND演算です。AND演算は、特定のビットだけを強制的にOFFにして、その他のビットはそのままにします。この操作を「ビットをマスクする」と呼びます。RGBの計算やOpenGLの実装でよく使います。16進数なので、0xFでマスクします。取り出す部分のビットが1になります。コードだと以下のように実装します。0xFb2進数に変換してAND演算します。10進数にすると5です。続いて下位部の計算をします。下位部は、シフトはしないで、ビットをマスクします。下位4ビットのデータだけを抜き出します。コードでは以下のように実装します。0xF2進数に変換してAND演算します。10進数だと10で、16進数に変換するとAです。char配列hexCodeを宣言して10進数を文字列に変換します。0xF]配列indexが10なので、文字列"A"が取得できます。上記で説明した16進数変換処理をforループを使って全てのバイトで実行します。ハッシュの結合MerkleTreeは、左の葉と右の葉のHashを結合して新しいHashを作成します。Hashの結合は、2つの文字列をバイト配列で結合します。MerkleHash(newBytes);}バイト配列の結合なので、ByteBufferクラスを使います。ByteBufferは、OpenGLの頂点バッファの生成等でよく使います。allocateメソッドで新しいbyteバッファを割り当てます。right.bytes.length」になります。両方のバイトをバッファへ転送し、byte配列を取得します。byteBuf.array();最後に、生成したバイト配列を、ハッシュ関数SHA-256でハッシュ化して完了です。MessageDigest.getInstance("SHA-256").digest(str.getBytes());以上でHash処理の実装は完了です。MerkleTreeの実装いよいよMerkleTreeを実装します。上記で実装したMerkleHashクラスをハッシュオブジェクトで使います。LeafクラスLeafクラスは、木構造のリーフ(葉)を表すクラスです。treeのリーフ(葉)Leaf(葉)はハッシュを持ちます。Leafクラスには、ハッシュを管理するMerkleHashクラスを持たせます。NodeクラスNodeクラスを作成します。Nodeクラスは、木構造の根と左右のリーフ(葉)を表すクラスです。treeのノードNodeは根と左右のリーフ(葉)を持ちます。Nodeクラスには、ハッシュを管理するMerkleHashクラスと左右のリーフ(葉)を持たせます。2の冪条の確認MerkleTreeを生成するデータ数は、2の冪条でないといけません。数が2の冪条である条件は、以下のように実装します。