Почему размер этих двоичных файлов равен, хотя они не должны?

1

Написав простой скрипт 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:

Изображение 174551

hexdump файлов:

Изображение 174551

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

  • 0
    Если у вас есть массив из восьми байтов, то вы собираетесь записать 8 байтов в файл. В конце концов, это очень важный период, если вы прочитаете его обратно, вы не захотите, чтобы было записано 8 байт - это 8 битов, и чтобы вернуть только один байт.
Теги:
arrays
binary

1 ответ

0
Лучший ответ

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

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

  • 0
    Спасибо! Я скучаю по этому, я создаю байты в функции byte_array ().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню