2016-05-10 11 views
4

Ich habe ein Programm, das den Offset (Differenz) berechnet und speichert sie dann in einem 16 Bit unsigned int mit numPy und ich möchte dieses Int in einer binären Datei speichern, wie es in binär ist bilden. Wenn der Wert von offset 05 ist, möchte ich, dass die Datei "01010000 00000000" anzeigt, aber nicht als String. Der Code, den ich geschrieben habe, ist:Python: Int in eine Binärdatei schreiben

target = open(file_cp, 'wb') 
target.write('Entries') 
target.write('\n') 
Start = f.tell() 
while(!EOF): 
    f.read(lines) 
    Current = f.tell() 
    offset = np.uint16(Current-Start) 
    target.write(offset) 

dort ein Teil der Verarbeitung nach f.read (Linien) ist, aber das ist sozusagen die Idee. Der Code funktioniert gut, solange der Offset kleiner als 127 ist. Sobald der Offset über 127 hinausgeht, erscheint in der Datei ein 0xC2 zusammen mit den Binärdaten.

Daten in der Datei erscheinen, wie folgt (hex Ansicht, wenig indian): 00 00 05 00 0e 00 17 00 20 00 3c 00 4e 00 7b 00 c2 8d 00 C2 92 00 c2 9f 00

Could jemand schlägt eine Lösung für das Problem vor?

Antwort

0

Sie sollten das eingebaute Modul struct verwenden. Statt dessen:

np.uint16(Current-Start) 

Try this:

struct.pack('H', Current-Start) 
+0

Ich denke, dass 'struct.pack ('H', np_uint16_instance)' ist das gleiche wie 'np_uint16_instance.tostring()' – mgilson

+0

Dies wird eine Zeichenfolge in die Datei schreiben, die nicht das ist, was ich suche. Ich habe die Frage aktualisiert, tut mir leid, wenn es vorher nicht klar war. –

1

bereits.

import numpy as np 
a=int(4) 
binwrite=open('testint.in','wb') 
np.array([a]).tofile(binwrite) 
binwrite.close() 

b=np.fromfile('testint.in',dtype=np.int16) 
print b[0], type(b[0]) 

Ausgang: 4-Typ 'numpy.int16'

Ich hoffe, das ist wha für Sie suchen. Funktioniert für n> 127 Aber lesen und schreiben numpy arrays ... binwrite = open ('testint.in', 'ab') können Sie mehr Ints an die Datei anhängen.

+0

Diese Antwort könnte durch die Verwendung der ['with statement'] (https://docs.python.org/dev/reference/compound_stmts.html#the-with-statement) verbessert werden (damit die Datei immer geschlossen wird, die Code wird idiomatischer/lesbarer/kürzer) und als Funktion drucken - so wie es aussieht, enthält Ihr Programm einen Syntaxfehler bei aktuellen Python-Versionen. – phihag

+0

Ich habe dies auf 2.7 versucht, sorry. – alxg

+0

Vielen Dank für den Vorschlag. Es macht immer noch dasselbe. anstelle von 4 habe ich versucht 148 und die datei lesen (hex ansicht): c2 94 00 –

Verwandte Themen