为什么这个二进制文件的大小相等,尽管它们不应该相等?

时间:2018-12-01 12:33:19

标签: python arrays binary

通过编写简单的python脚本,我遇到了一个奇怪的问题:具有不同内容的两个文件具有相同的大小。

所以,我有一些二进制数据的两个相同列表,一个是字符串,一个是int:

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

然后,我将列表转换为字节数组:

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

我的问题是,为什么文件大小相等?就像我现在所说的,要写入0或1的值,我们需要1位,而要写入30或31的十六进制值,我们需要5位(1 1110和1 1111)

1 个答案:

答案 0 :(得分:1)

要写入01的值,则不需要一位。您如何分辨3 = 11或拥有两个1之间的区别?

在这两种情况下,您都将写一个8字节的数组,在第一种情况下,您将使用整个字节来写char。
可以想象它是由字母01组成的单词,单词10000 0001,如果没有开头的0s,您将不会能够分辨出这个词是什么。