У меня есть программа, которая вычисляет смещение (разницу), а затем сохраняет их в 16-битном беззнаковом int с помощью numPy, и я хочу сохранить это int в двоичный файл, поскольку он находится в двоичной форме. т.е. если значение смещения равно 05, я хочу, чтобы файл отображал «01010000 00000000», но не как строку. Код, который я написал:

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)

Есть некоторая обработка после f.read (lines), но это своего рода идея. Код работает нормально, пока смещение меньше 127. Как только смещение превышает 127, в файле появляется 0xC2 вместе с двоичными данными.

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

Может кто-нибудь подсказать решение проблемы?

4
omkar joshi 10 Май 2016 в 07:25

2 ответа

Попробуй это.

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

Вывод: 4 типа 'numpy.int16'

Надеюсь, это то, что вы ищете. Работает для n> 127, но читает и записывает массивы numpy ... binwrite = open ('testint.in', 'ab') позволит вам добавить больше int в файл.

2
alxg 10 Май 2016 в 09:48

Вам следует использовать встроенный модуль struct. Вместо этого:

np.uint16(Current-Start)

Попробуй это:

struct.pack('H', Current-Start)
0
John Zwinck 10 Май 2016 в 07:31
Я думаю, что struct.pack('H', np_uint16_instance) это то же самое, что np_uint16_instance.tostring()
 – 
mgilson
10 Май 2016 в 07:36
Это запишет в файл строку, которую я не ищу. Я обновил вопрос, извините, если раньше он не был ясен.
 – 
omkar joshi
10 Май 2016 в 20:59