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"
を得る.