2016-08-05 115 views
0

如果我有下面的格式十六進制值名爲log1中的日誌文件:十六進制有符號的十進制

D8 D4 D4 D2   
D6 D4 D4 D2 
D6 D4 D4 D2  
D6 D4 D4 D1 
...............etc 

我怎麼能轉換這個值符號的十進制(見下文格式),然後將它們保存到另一個文件名爲log2?

-40 -44 -44 -46 
-42 -44 -44 -46 
-42 -44 -44 -46 
-42 -44 -44 -47  
....................etc 



    with open("log1.log","r") as f: 
     data = f.read() 
    def s16(value): 
     return -(value & 0x80) | (value & 0x7f) 
    new_data = s16(int(data[0:2], 16)), s16(int(data[3:5], 16)), s16(int(data[6:8], 16)), s16(int(data[9:11], 16)) 

    with open("log2.log","w") as f: 
     f.write(new_data) 

這是我到目前爲止,這段代碼,我能夠打印第一線

(-40, -44, -44, -46) 

,但我不知道如何使它打印所有行,而不僅僅是第一在線謝謝。

回答

0

假設這是兩個補字節:

return value - 256 if value > 127 else value 
+0

尼斯,簡單易懂。比使用位操作符更好。 –