Потеря размера чисел при обработке в шестнадцатеричном формате

#python #python-3.x #list #numbers #hex

Вопрос:

Столкнулся с проблемой при обработке шестнадцатеричных чисел. При запуске str (hex ()) из файла нули после 0x... исчезают.

У входа:

 0x0000000000000000000000000000000000000000000000000000000000000001f01f80f12f7cf16638f7a8074d46fe2f421a73432b1441a01ed3dd883c68acad
0x00000000000000000000000000000000000000000000000000000000000000029a799033fc54073346f870c15c9836f6b2e9eccdb85f09d29a8ddc90dc3a8ef1
0x00000000000000000000000000000000000000000000000000000000000000033e561483073e429ec25c09c99de2a81d5a34a539ad2dbb688af6b6f5f24936a4
 

На выходе:

 0x1f01f80f12f7cf16638f7a8074d46fe2f421a73432b1441a01ed3dd883c68acad
0x29a799033fc54073346f870c15c9836f6b2e9eccdb85f09d29a8ddc90dc3a8ef1
0x33e561483073e429ec25c09c99de2a81d5a34a539ad2dbb688af6b6f5f24936a4
 

Код:

    with open("data.txt", "r") as file:
        for line in file:
            L = int(line, 0)
            R = str(hex(L))
            print(R)
 

Что нужно исправить в коде? Мне нужен один размер чисел и без потери нулей.

Комментарии:

1. не могли бы вы, пожалуйста, предоставить свой код?

2. вероятно, вы ищете форматирование строк для заполнения значения

3. @0dminnimda Написал код

4. hex(L) возвращает строку, поэтому str(hex(L)) она избыточна.

5. @ti7 Мне нужно, чтобы он был одного размера

Ответ №1:

Используйте форматирование строк:

  • # средства, нанесенные 0x спереди для шестнадцатеричных чисел.
  • 0130 означает, что длина полей составляет 130 символов, начальный ноль означает заполнение нулями.
  • x означает шестнадцатеричное число (строчные буквы a-f).
 line = '0x0000000000000000000000000000000000000000000000000000000000000001f01f80f12f7cf16638f7a8074d46fe2f421a73432b1441a01ed3dd883c68acad'
print(line)  # as read from file
integer = int(line, 0)
formatted = f'{integer:#0130x}'
print(formatted)
print(formatted == line) # check that original and re-formatted are the same
 

Выход:

 0x0000000000000000000000000000000000000000000000000000000000000001f01f80f12f7cf16638f7a8074d46fe2f421a73432b1441a01ed3dd883c68acad
0x0000000000000000000000000000000000000000000000000000000000000001f01f80f12f7cf16638f7a8074d46fe2f421a73432b1441a01ed3dd883c68acad
True