通过编写简单的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:
文件的十六进制转储:
我的问题是,为什么文件大小相等?就像我现在所说的,要写入0或1的值,我们需要1位,而要写入30或31的十六进制值,我们需要5位(1 1110和1 1111)
答案 0 :(得分:1)
要写入0
或1
的值,则不需要一位。您如何分辨3 = 11
或拥有两个1
之间的区别?
在这两种情况下,您都将写一个8字节的数组,在第一种情况下,您将使用整个字节来写char。
可以想象它是由字母0
和1
组成的单词,单词1
是0000 0001
,如果没有开头的0s
,您将不会能够分辨出这个词是什么。