У меня есть двоичный файл (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 complement)
+
00000000 00000000 00000000 00000001 (add 1) <br/>
-----------------------------------------
= 11011110 11001100 11011101 11101111 (2 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
до 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))