Написав простой скрипт 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:
hexdump файлов:
И мой вопрос в том, почему размер файла равен? Поскольку я сейчас, чтобы написать значение 0 или 1, нам нужно 1 бит, и для записи шестнадцатеричного значения 30 или 31 нам нужны 5 бит (1 1110 и 1 1111)
Чтобы записать значение 0
или 1
вам не нужен ни один бит. Как вы могли рассказать разницу между 3 = 11
или двумя 1
?
Вы пишете в обоих случаях массив из 8 байтов. Просто в первом случае вы используете весь байт для записи символа.
Подумайте об этом, написав слово из букв 0
и 1
, слово 1
- 0000 0001
Без 0s
в начале вы не сможете сказать, что это за слово.