2017-02-10 89 views
0

im當前正試圖從python字符串中獲取字節並將其保存到signed int數組中 我嘗試從文件中獲取所有字節而不是將'\ x00 「在一個數組,然後試圖從字節獲得INT但我不斷收到以下錯誤 ‘類型錯誤:無法Unicode的對象轉換爲字節’python從二進制文件中讀取數據並將其寫入有符號int

file=open('norm.raw','rb') 
data=file.read() 
file.close() 
#data=binascii.b2a_hex(data) 
byteArr=str(data)[2:-1] 

for byte in byteArr: 
    i+=1 
    if byte == "\\": 
     cadena.append(byteArr[j:j+i]) 
     j=j+i 
     i=0 
for stri in cadena: 
    print(int.from_bytes('\\'+stri[:-1],byteorder='big',signed='true')) 

不知道這是獲得簽署的最佳方式如果有人知道一個更好的方法來做到這一點,請幫助我。

編輯: 目前我可以帶一個字節的字節表示法陣 我可以提取b'x02' 中,但現在我不能在開始添加字符\將其轉換爲符號整型。

+0

你可以添加一些你的輸入數據嗎? –

+0

最後一個字節來自文件:\ xff \ xf0 \ xff \ xf0 \ xff \ xf1 \ xff \ xf0 \ xff \ xf3 \ xff,它應該是:-1,-16,-1,-16,-1,-15 ,-1,-16,-1,-13,-1 –

+0

請將您的解決方案作爲答案發布,而不是編輯問題。我已經回滾了您的修改,可以在修訂歷史記錄中找到它。 – halfer

回答

0

有一個decode函數可用於字節對象。

bs = b'\x31' 
x = int(bs.decode()) 

https://docs.python.org/3/library/stdtypes.html#bytes.decode

編輯:

以前的版本採用的Unicode值進行解碼。如果您的值存儲在原始字節中。然後你可以用下面的方法得到整數。

binary_bytes = b'\xff\xf0\xff\xf0\xff\xf1\xff\xf0\xff\xf3\xff' 

for i in range(len(binary_bytes)-1): 
     print(int.from_bytes(binary_bytes[i:i+1], byteorder='big', signed='true'), end=', ') 

輸出:-1, -16, -1, -16, -1, -15, -1, -16, -1, -13, -1

+0

當我嘗試它,我得到這個錯誤: 文件「」,1號線,在 ValueError異常:無效的字面INT()基數爲10:「\ X11」 –

+0

你必須解碼字節,然後將其發送到函數'int'。不要直接傳遞'b'\ x11''。 – pmuntima

0

這是回答您的評論。

我假設你有一系列這樣的b'\xff\xf0\xff\xf0\xff\xf1\xff\xf0\xff\xf3\xff'

所以字節,則可以以有你想要的輸出做財產以後這樣的:

def func(a): 

    data = [a[k:k+1] for k in range(len(a))] 
    final = [] 
    for k in data: 
     final.append(int.from_bytes(k, byteorder = 'big', signed = True)) 

    return final 

a = b'\xff\xf0\xff\xf0\xff\xf1\xff\xf0\xff\xf3\xff' 

print(func(a)) 

輸出:

[-1, -16, -1, -16, -1, -15, -1, -16, -1, -13, -1] 
相關問題