Почему размер этих двоичных файлов равен, хотя они не должны? - PullRequest
0 голосов
/ 01 декабря 2018

При написании простого скрипта на Python я обнаружил странную проблему: два файла с разным содержимым имеют одинаковый размер.

Итак, у меня два одинаковых списка двоичных данных, один в строке, один вint:

char_list = '10101010'
int_list = [1, 0, 1, 0, 1, 0, 1, 0]

Затем я преобразую списки в bytearray:

bytes_from_chars = bytearray(char_list, "ascii")
bytes_from_ints = bytearray(int_list)

Распечатав это, дайте мне такой результат:

bytearray(b'10101010')
bytearray(b'\x01\x00\x01\x00\x01\x00\x01\x00')

но этоок.

Запись этих данных на диск:

with open("from_chars.hex", "wb") as f:
    f.write(bytes_from_chars)

with open("from_ints.hex", "wb") as f:
    f.write(bytes_from_ints)

И размер файлов такой же , но файлы содержат разные данные!

ls -l:

size of files

hexdump файлов:

hexdump

И мойВопрос в том, почему размер файла равен?Как и сейчас, для записи значения 0 или 1 нам нужен 1 бит, а для записи шестнадцатеричного значения 30 или 31 нам нужно 5 бит (1 1110 и 1 1111)

1 Ответ

0 голосов
/ 01 декабря 2018

Для записи значения 0 или 1 вам не требуется ни одного бита.Как вы можете определить разницу между 3 = 11 или двумя 1?

В обоих случаях вы пишете массив из 8 байтов. Просто в первом случае вы используете для записи весь байтсимвол
Думайте об этом как о написании слова из букв 0 и 1, слово 1 равно 0000 0001, без 0s в начале вы не сможете сказать, что это за слово.

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