質問: hextable[v&0x0f] } return len(src) * 2 } ```
回答: hextable には0~15を16進数で表わした文字が並んでいます。uint8型の値から4bitずつ切り出せば0~15の数値が得られるので、これを添え字としてhextableから文字を取り出しています。 例えばあるバイトが0xAEだったとすると * `0xAE >> 4` は 10 (0xA) 、`hextable[10]` つまり11文字目は `a` * `0xAE & 0x0f` は 14 (0xE) 、`hextable[14]` つまり15文字目は `e` これらを順番に並べていくと16進数の文字列が得られます。 ビットシフトや論理積は4bitずつ分けるのに使っているだけで、ポイントはhextableの方です。 類似の例として、BASE64のエンコード処理は6bitごとに切り、64文字のテーブルを参照します。