通過編寫簡單的 python 腳本,我遇到了一個奇怪的問題:具有不同內(nèi)容的兩個文件具有相同的大小。所以,我有兩個相同的二進(jìn)制數(shù)據(jù)列表,一個在字符串中,一個在 int 中:char_list = '10101010'int_list = [1, 0, 1, 0, 1, 0, 1, 0]然后,我將列表轉(zhuǎn)換為字節(jié)數(shù)組:bytes_from_chars = bytearray(char_list, "ascii")bytes_from_ints = bytearray(int_list)打印出來,給我這個結(jié)果:bytearray(b'10101010')bytearray(b'\x01\x00\x01\x00\x01\x00\x01\x00')但是,這沒關(guān)系。將此數(shù)據(jù)寫入磁盤: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)并且文件大小相同,但文件包含的數(shù)據(jù)不同!ls -l:文件的十六進(jìn)制轉(zhuǎn)儲:我的問題是,為什么文件的大小相等?就像我現(xiàn)在一樣,要寫入 0 或 1 的值,我們需要 1 位,而要寫入 30 或 31 的十六進(jìn)制值,我們需要 5 位(1 1110 和 1 1111)
1 回答

胡子哥哥
TA貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊
要寫入0
or的值,1
您不需要一個位。你怎么能告訴之間的差異3 = 11
或有兩個1
?
在這兩種情況下,您都在編寫 8 個字節(jié)的數(shù)組,而在第一種情況下,您使用整個字節(jié)來編寫字符。
把它想象成從字母0
和寫一個詞1
,這個詞1
是0000 0001
,如果沒有0s
開頭,你將無法說出這個詞是什么。
添加回答
舉報
0/150
提交
取消