バイナリデータ 文字リテラル 2進数 16進数

python
整数 255 から \xff を示す1バイトのバイナリデータをつくりたい.
そのために bytes.fromhex() に与える16進表示の文字列をつくりたい.
整数が 0~255 の変数のときにどのようにしたらいいか.

bytes.fromhex(hex(255)[2:])
返り値 b\xff
これだと
bytes.fromhex(hex(15)[2:])
ではエラーとなって駄目だ. hex(15)= "0xf" であるため(ふつう 0 padding されていないので文字列の長さが変わる) .

解決:
"{0:0{1}x}".format(15,2)
"{0:0{1}x}".format(255,2)
これでそれぞれ 文字列
"0f"
"ff"
を生成できる.

prefix “0x” が必要な場合は "{0:#0{1}x}".format(15,4)
format の2つ目の引数が全体の長さを決めている.

参考:
python – Decorating Hex function to pad zeros – Stack Overflow

byte 型は + 演算子で結合できるので

bytes.fromhex("{0:0{1}x}".format(15,2))+ bytes.fromhex("{0:0{1}x}".format(255,2))
b"\x0f\xff" を得る.


カテゴリー: 未分類 パーマリンク