Pythonで16進数文字列を扱う際のメモ書き
やりたいこと
Pythonで16進数を扱うときにbyteに変換したり文字列に変換したり,LittleEndianとBigEndianを変換したりしたい。
型変換
class 'int' → class 'bytes'
num = 0x68656c6c6f str_num = format(num, 'x') #文字列に変換 print(str_num) # '68656c6c6f' bytes_num = bytes.fromhex(str_num) #bytesに変換 print(bytes_num) # b'hello'
class 'str' → class 'bytes'
greet = 'hello' bytes_greet = 'hello'.encode() #bytesに変換 print(bytes_greet) # b'hello' bytes_greet_num = bytes_greet.hex() print(bytes_greet_num) # '68656c6c6f'
Endian変換
16進数文字列は1文字1バイト
つまり1文字表すのに16進数2桁で表現する。
16進文字列の単純な並び替えではうまくいかない。
BigEndian → LittleEndian
... #変換したいbytes型の変数を用意する print(bytes_num) # b'hello' pirnt(bytes_num.hex()) # '68656c6c6f' rev =bytes_num[::-1] print(rev) #b'olleh' print(rev.hex()) # '6f6c6c6568'
LittleEndian → BigEndian
ほぼ上と同じなので割愛