python - 在 Python 中计算二进制文件的校验和
问题描述
我有一个二进制文件(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))
请帮我解决上述问题和代码。
解决方案
您没有byte
在while
循环中更新,因此循环永远不会结束。
您应该继续阅读f
until byte
is 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))
推荐阅读
- php - 如何通过数据映射器将受保护的属性保存到数据库?
- assembly - 为什么我的 .s 文件不能使用我的 Raspberry Pi VM 组装?
- mongodb - 在mongodb中使用按位而不是大量布尔值是一个好策略吗?
- python - 计算熊猫时间序列中的连续 nan 值
- python - tensorflow 是否在同一设备上并行执行图形的独立部分?
- asp.net-core-mvc - 如果没有自定义视图模型,.Net 核心视图组件将无法工作
- android-studio - 如何使 Flutter 应用的 Navigation Drawer 透明?
- node.js - 你可以在 azure webchat 和 skype 上使用 Botkit 和 botframework 吗?
- r - R中缺失数据的百分比给出错误
- c - 如何制作一个接受 C 中两位整数或字符的菜单界面?