Я пишу программу python, чтобы заменить программу C, которая, помимо прочего, получила данные от микроконтроллера. Это было сделано на C, используя простой сокет и функцию чтения. В моей программе python я могу читать строку данных с микроконтроллера, но я не могу представить ее в читаемом формате. Я захватил эту строку и написал гораздо меньшую программу, которая пытается преобразовать его в только список номеров:Чтение двоичных данных в python (для замены кода C)
import array
import thread
import socket
import time
import math
import numpy as np
import struct
data = open("rawfile.txt", 'r')
conv = open("conv.bin", 'wb')
pack = open("pack.txt", 'w')
# This line reads in the data string from the file
rawdata = data.read()
length = len(rawdata)
unpack = np.zeros(length, dtype=np.int64)
inter = np.int64
size = 4
m=0
for n in range(0,length-size):
inter = struct.unpack_from('h',rawdata,n)
unpack[m] = inter[0]
m=m+1
n=n+4
conv.write(unpack)
for j in range(0,len(unpack)):
#print unpack[j]
stringtowrite = str(unpack[j])
pack.write(stringtowrite)
pack.write(',')
#conv.write(dat2)
print "Done"
Вот данные, которые производит эта программа (нанесено в Matlab), а также то, что данные должны выглядеть как: (уборщик пульс, что она должна выглядеть)
Любая помощь будет принята с благодарностью, я боролся с этим в течение нескольких недель. Я могу загрузить файл необработанных данных, но я не был уверен, как это сделать, поскольку он довольно большой.
Итак, на мой вопрос, почему мой вопрос заключается в том, почему программа создает данные для первого изображения, а не второго, и есть ли что-то явно неправильное в том, как я читаю и преобразую данные.
Заранее благодарен!
EDIT/UPDATE:
Благодаря больших ответов ниже, я теперь я использую это:
dt = np.dtype('int16')
unpack = np.zeros(302000, dtype=dt)
unpack = np.fromfile(data, dtype=dt)
conv.write(unpack)
и данные выглядят лучше! Первое изображение с dtype ('int16'), а второе - с dtype ('int32'). Я также узнал, что данные, которые я читаю, состоят из чередующихся реальных/мнимых чисел, если это изменит строку формата, которую я использую для numpy dtype? Насколько мне известно, в коде C не было шага, который учитывал это.
Final Update:
Чтобы избежать путаниц, для кого-то еще, вторых двух изображений выше, читающих данные правильно, это было проблема в фактических данных, заставляя их не выглядеть правильно.
Вы должны удалить гр тег. Потому что в вашем вопросе нет кода c. – Stargateur
В противном случае предоставьте старый исходный код в C как ссылку для чтения двоичных данных. –