我有一个二进制文件(2个字节),其十六进制格式的内容如下:
00 00 00 DD 11 22 33 44
二进制格式的内容如下(小端格式):
11011101 00000000 00000000 00000000 01000100 00110011 00100010 00010001
我想手动计算文件的校验和,并将其附加在文件末尾。为了进行计算,我一次要考虑4个字节的块。
然后,手动步骤应如下所示:
11011101 00000000 00000000 00000000
+
01000100 00110011 00100010 00010001
--------------------------------------
= 00100001 00110011 00100010 00010001
11011110 11001100 11011101 11101110 (1's complement)
+
00000000 00000000 00000000 00000001 (add 1) <br/>
-----------------------------------------
= 11011110 11001100 11011101 11101111 (2's complement) = CheckSum
如果我错误地计算了校验和,请纠正我。 我编写的用于在系统中计算校验和的代码无法正常工作。
add = 0
with open("temp.bin", "rb") as f:
## Read first 4 bytes of data
byte = f.read(4)
while byte != "":
add += int.from_bytes(byte, byteorder="little")
print(b"%02X" % (~add & 0xFFFFFFFF))
请帮助我解决上面的问题和代码。
答案 0 :(得分:2)
您不会在byte
循环中更新while
,因此循环永远不会结束。
您应继续从f
开始阅读,直到byte
为None
:
add = 0
with open("/temp/test.py", "rb") as f:
## Read first 4 bytes of data
while True:
byte = f.read(4)
if not byte:
break
add += int.from_bytes(byte, byteorder='little')
print(b'%02X' % (~add & 0xFFFFFFFF))