Python: значение шестнадцатеричного преобразования не обновляется. - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в программировании python и столкнулся с некоторыми проблемами с форматированием извлеченного 32-битного CR C из файла. Я хочу, чтобы CR C хранился в другом файле, где формат хранения должен быть 0x2 C, 0x9F, 0x0D, 0xE0

, когда я запускаю этот код ниже, я получаю вывод хранится в ApplicationData1.cr c как 0x2 c, 0x9f, 0xd, 0xe08, а также третий байт - 0xd, который должен быть 0x0D , а четвертый байт - 0xe08, который должен быть 0xE0 , может кто-нибудь сказать мне, что я делаю не так или что можно попробовать?

Когда я запускаю код, он проходит две итерации и выводит целочисленные значения, как показано ниже:

a4, a3, a2, a1, checksum:
88, 149, 192, 178, 2998965592
224, 13, 159, 44, 748621280
import zlib
def crc32(filename="C:\\Users\\Desktop\\ApplicationData.bin", chunksize=65536):
    with open(filename, "rb") as f1:
        checksum = 0
        while (chunk := f1.read(chunksize)) :
            checksum = zlib.crc32(chunk, checksum)
            file = open('ApplicationData1.crc', "w")
            print(hex(checksum))
            checksum_hex=hex(checksum)
            a4 = (checksum & 0xff)
            a3 = (checksum >> 8) & 0xff
            a2 = (checksum >> 16) & 0xff
            a1 = checksum >> 24
            print(hex(a3))
            file.write('%s , %s, %s, %s' % (hex(a1), hex(a2), hex(a3), hex(a4)))
crc32()

1 Ответ

0 голосов
/ 04 августа 2020

Таким образом, вы можете исправить проблему 0xd, используя форматирование строки. Я не могу воспроизвести вашу проблему 0xe08. Это может быть потому, что вы открываете файл, но не закрываете его.

Это решает вашу проблему 0xd. Посмотрите, решит ли он и другую вашу проблему:

data = [
  [88, 149, 192, 178, 2998965592],
  [224, 13, 159, 44, 748621280]
]
with open('output.crc', 'w') as out_file:
    for a4, a3, a2, a1, checksum in data:
        r = "0x{:02X}, 0x{:02X}, 0x{:02X}, 0x{:02X}".format(a1, a2, a3, a4)
        # or with f-string f"0x{a1:02X}, 0x{a2:02X},0x{a3:02X}, 0x{a4:02X}"
        out_file.write(r + '\n')

output.cr c:

0xB2, 0xC0, 0x95, 0x58
0x2C, 0x9F, 0x0D, 0xE0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...