Почему количество битов в файле и двоичное представление одного и того же файла различны? - PullRequest
1 голос
/ 23 марта 2020

Я написал код (приведенный в конце поста), который просто преобразует байты файла (= byte_obj) в двоичное число binary_dt, поэтому я ожидаю, что число битов в byte_obj и binary_dt будет таким же, но это не так, я использовал текстовый файл 3 КБ и получил выходной файл размером 17 КБ (output = запись binary_dt в текстовый файл), почему это так?

Обратите внимание, что число байтовых объектов в byte_obj файла равно 2117, а размер byte_obj (с накладными расходами на фактическое содержимое из-за данных структуры) равен 2150, поэтому здесь нет большой разницы ..

Итак, что не так, может кто-нибудь объяснить, пожалуйста? и что мне делать, если я хочу получить одинаковое количество бит от binary_dt и byte_obj?

import sys

input_file="a.txt";output_file="b.txt"
with open(input_file, "rb") as file: #--> open file in binary read mode
  byte_obj = file.read() #--> read all binary data


print("Number of byte-object in 'byte_obj' = ",len(byte_obj))
print("The size of 'byte_obj' (has an overhead over the actual content, due to structure data) = \n",str(sys.getsizeof( byte_obj))) #Return the size of an object in bytes.


binary_dt=bin(int.from_bytes( byte_obj, byteorder=sys.byteorder))

print("The number of bits in 'binary_dt' on PC= \n",len(binary_dt)) #Return the size of an object in bytes.
print("binary_dt: \n",binary_dt)

text_file = open(output_file, "w")
n = text_file.write(binary_dt)
text_file.close()

1 Ответ

0 голосов
/ 23 марта 2020

Это потому, что вы читаете двоичный файл и пишете ASCII:

>>> bin(3)
'0b11'

Здесь 2 бита, преобразованные в 4 байта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...