2017-02-10 2 views
0

Ich versuche derzeit, die Bytes aus Python-String zu erhalten und es in signierten int-Array Ich versuche, alle Bytes aus der Datei als Split '\ x00 zu bekommen 'in einem Array dann versuchen, den int aus diesem Byte zu bekommen, aber ich halte den folgenden Fehler bekommen ‚Typeerror: kann nicht Unicode-Objekt Bytes‘Python lesen Sie die Daten aus der Binärdatei und schreibe sie in signed 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')) 

konvertieren weiß nicht, ob dies der beste Weg ist, die unterzeichnet zu erhalten int Bytes aus einer Datei in Python, wenn jemand einen besseren Weg kennt, bitte helfen Sie mir.

edit: zur Zeit kann ich in dem Array die Byte-Notation eines Bytes nehme ich die b'x02' extrahieren kann, aber jetzt kann ich nicht das Zeichen \ am Anfang fügen Sie es zu signed int zu konvertieren.

+0

Könnten Sie einige Daten Ihrer Eingabe hinzufügen? –

+0

letzte Bytes aus der Datei: \ xff \ xf0 \ xff \ xf0 \ xff \ xf1 \ xff \ xf0 \ xff \ xf3 \ xff, sollte es sein: -1, -16, -1, -16, -1, -15 , -1, -16, -1, -13, -1 –

+0

Bitte posten Sie Ihre Lösung als Antwort, nicht als Bearbeitung der Frage. Ich habe Ihre Änderung rückgängig gemacht, sie befindet sich im Überarbeitungsverlauf. – halfer

Antwort

0

Es gibt eine decode Funktion, die auf einem Byte Objekt funktioniert.

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

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

EDIT:

Die vorherige Version führt den Unicode-Wert zu entschlüsseln. Wenn Sie Wert im rohen Byte gespeichert haben. Dann können Sie Ganzzahlen auf folgende Weise erhalten.

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=', ') 

Ausgang: -1, -16, -1, -16, -1, -15, -1, -16, -1, -13, -1

+0

erhalte ich diesen Fehler, wenn ich es versuchen: File „“ Linie 1 in Valueerror: invalid für int wörtliche() mit Basis 10: ‚\ x11‘ –

+0

Sie haben die Bytes zu entschlüsseln und dann schicken Sie es an die Funktion 'int'. Übergeben Sie das 'b '\ x11'' nicht direkt. – pmuntima

0

Dies ist eine Antwort auf Ihren Kommentar.

Ich nehme an, Sie haben eine Reihe von Bytes wie diese b'\xff\xf0\xff\xf0\xff\xf1\xff\xf0\xff\xf3\xff'

Also, Sie somthing wie diese, um Ihre gewünschte Ausgabe zu tun haben können:

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)) 

Ausgang:

[-1, -16, -1, -16, -1, -15, -1, -16, -1, -13, -1] 
Verwandte Themen