簡體   English   中英

Python:十六進制轉換值未更新

[英]Python:Hex conversion value is not updating

我是 python 編程的新手,在格式化從文件中提取的 32 位 CRC 時遇到了一些問題。 我希望將CRC校驗碼存儲在另一個文件中,存儲格式應該是0x2C, 0x9F, 0x0D, 0xE0

當我運行下面的代碼時,我將 output 作為 0x2c、0x9f、0xd、0xe08 存儲在 ApplicationData1.crc 中,第三個字節是 0xd,應該是0x0D ,第四個字節是 0xe08,應該是0xE0 ,誰能告訴我我做錯了什么或可以嘗試什么?

每當我運行代碼時,它都會經歷兩次迭代並打印 integer 值,如下所示:

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()

因此,您可以使用字符串格式來修復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.crc:

0xB2, 0xC0, 0x95, 0x58
0x2C, 0x9F, 0x0D, 0xE0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM