«{: 02x}» не может привести к попарно шестнадцатеричному формату для 239557639 - PullRequest
0 голосов
/ 13 сентября 2018
  >>> "{:02x}".format(13)
     '0d'
  >>> "{:02x}".format(239557639)
    'e475c07'

Я знаю, что этот формат приводит к шестнадцатеричным парам. Это также работает для другого целого числа, но не работает для 239557639

На самом деле, я хочу сделать следующее с выводом

>>> bytearray.fromhex('e475c07')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: non-hexadecimal number found in fromhex() arg at position 7
>>> bytearray.fromhex('0e475c07')
bytearray(b'\x0eG\\\x07')
>>>

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Более общая функция для создания печатной шестнадцатеричной строки с выравниванием по байту для целого числа:

def aligned_hex_string(number, align_by=2):
    length = len(format(number, 'x'))
    mod = length % align_by
    return format(number, '0{}x'.format(length + align_by - mod) if mod else 'x')

print(aligned_hex_string(13))
print(aligned_hex_string(255))
print(aligned_hex_string(256))
print(aligned_hex_string(239557639))
print(aligned_hex_string(239557, 4))

Вывод:

0d
ff
0100
0e475c07
0003a7c5
0 голосов
/ 13 сентября 2018

В этом случае может возникнуть проблема с форматированием вашего шестнадцатеричного числа.Попробуйте {:08x}:

>>> bytearray.fromhex('{:08x}'.format(239557639))
bytearray(b'\x0eG\\\x07')
...