Вероятно, лучший способ - через встроенный модуль struct :
>>> import struct
>>> x = 1245427
>>> struct.pack('>BH', x >> 16, x & 0xFFFF)
'\x13\x00\xf3'
>>> struct.pack('>L', x)[1:] # could do it this way too
'\x13\x00\xf3'
В качестве альтернативы - и я бы не рекомендовал это, потому что это подвержено ошибкам - вы можете сделать это "вручную", сдвигая и функция chr()
:
>>> x = 1245427
>>> chr((x >> 16) & 0xFF) + chr((x >> 8) & 0xFF) + chr(x & 0xFF)
'\x13\x00\xf3'
Из любопытства, почему вы хотите только три байта? Обычно вы упаковываете такое целое число в полные 32 бита (C unsigned long
) и используете struct.pack('>L', 1245427)
, но пропускаете шаг [1:]
?