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

ほぼ上と同じなので割愛