2017-02-10 9 views
0

im в настоящее время пытается получить байты из строки python и сохранить его в подписанном int-массиве Я пытаюсь получить все байты из файла, чем разделить '\ x00 'в массиве затем попытаться получить Int из этого байта, но я постоянно получаю следующую ошибку „TypeError: не может преобразовать объект Юникода в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')) 

байтов“ не знаю, если это лучший способ получить подписанную int bytes из файла в python, если кто-то знает лучший способ сделать это, пожалуйста, помогите мне.

редактировать: в настоящее время я могу взять байты обозначение байта в массиве я могу извлечь 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

РЕДАКТИРОВАТЬ:

В предыдущей версии принимает значение Юникода для декодирования. Если у вас есть значение, хранящееся в исходном байте. Затем вы можете получить целые числа следующим образом.

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'

Итак, вы можете сделать Somthing как это для того, чтобы иметь ваш желаемый результат:

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] 

 Смежные вопросы

  • Нет связанных вопросов^_^