2016-03-10 48 views
-1

我有一個由幾行組成的比特流文件。生成該文件的c程序可執行文件將該文件輸出爲一系列「short int」,它們實際上是16位整數。當我在記事本打開該文件,我得到以下的前幾行:由c程序打開的16位整數的二進制文件打開爲1s和0在python中

7E1755EB7909DAC8FF4117BDAA0E86EBD1A8 
1C3D47DD6606D812E8862D347288C3A251EB 
16D7D02AD908E0083C142C107AB916C55BE0 

我需要能夠在Python打開這個文件,並將其轉換爲1秒,並表示原來的「短整型」 0或換句話說就是一個1和0的數組。我想我在閱讀文件時也可能遇到與「\ n」有關的新問題。

我嘗試下面的代碼,看看哪些方法最有效:

時,我只在第8個字節讀取的結果是:

0b1111110000101110101010111101011 
(17719, 14129, 13621, 16965) 

與問題第一個結果是我應該得到64 1和0,第二個問題是它是「元組」而不是1和0的數組,我不相信整數是基於16位的。他們看起來更像15位,但我不確定。

在此先感謝您的幫助。

+0

這是** **不是二進制文件。這是一個十六進制文件。 –

+0

你怎麼看?不能記事只是將它解釋爲HEX? – sciguy

+0

如果這是一個隨機的二進制文件,記事本會顯示垃圾。這個二進制看起來像一個ASCII十六進制編碼的機會很小,但這不太可能。你的評論提到線也是一個暗示。二進制數據中沒有行,因爲與文本文件不同,新行字節(或窗口上的字節)只是更隨機的二進制數據。 – tdelaney

回答

0

假設你有二進制數據剛剛解碼ascii十六進制,你可以讀取文件到python array。它與你的第二個解包到一個元組中的例子沒有多大區別,只是它的速度更快,內存佔用更少。根據你下一步要做什麼,改爲讀取numpy數組是合理的。

import os 
import array 

#filePathC = "C:\\Working\\Vocoder Sims\\ofile.chan" 
filePathC = "test.bin" 

count = os.stat(filePathC).st_size/2 
with open(filePathC, 'rb') as fp: 
    binaryC3 = array.array("h") 
    binaryC3.fromfile(fp, count) 

print binaryC3 
print bin(binaryC3[0]) 

對於示例文件,這給了我

array('h', [17719, 14129, 13621, 16965, 14647, 14640, 16708, 14403, 17990, 12596, 14129, 17474, 16705, 17712, 13880, 16965, 12612, 14401, 12554, 13123, 13380, 17463, 13892, 12342, 17462, 12600, 17714, 14392, 12854, 13124, 14132, 14386, 17208, 16691, 13618, 17713, 2626, 13873, 14148, 12356, 16690, 14660, 14384, 12357, 14384, 17203, 13361, 17202, 12337, 16695, 14658, 13873, 13635, 16949, 12357]) 
0b100010100110111 
+0

如何將此數組轉換爲1和0,以便我可以執行模2操作? – sciguy

+0

你想要一個單一的0和1的長流?我以爲你想要一個16位的短數組值。讓我考慮一下...... – tdelaney

+0

是的。我想添加位錯誤,然後再以相同的格式重新組合文件。這真的是最終的遊戲。我想採取origianl比特流文件和錯誤。 – sciguy

相關問題