Я пытаюсь прочитать двоичный файл (который представляет собой матрицу в Matlab) в Python.Но у меня возникают проблемы с чтением файла и преобразованием байтов в правильные значения.
Бинарный файл состоит из последовательности 4-байтовых чисел.Первые два числа - это количество строк и столбцов соответственно.Мой друг дал мне функцию Matlab, которую он написал, которая делает это с помощью fwrite.Я хотел бы сделать что-то вроде этого:
f = open(filename, 'rb')
rows = f.read(4)
cols = f.read(4)
m = [[0 for c in cols] for r in rows]
r = c = 0
while True:
if c == cols:
r += 1
c = 0
num = f.read(4)
if num:
m[r][c] = num
c += 1
else:
break
Но всякий раз, когда я использую f.read (4), я получаю что-то вроде '\ x00 \ x00 \ x00 \ x04' (этот конкретный пример должен представлять4), и я не могу понять, преобразовать ли это в правильное число (использование int, hex или чего-то подобного не работает).Я наткнулся на struct.unpack, но это, похоже, не очень помогло.
Вот пример матрицы и соответствующего двоичного файла (как это выглядит, когда я читаю весь файл, используя функцию python f.прочитайте () без какого-либо параметра размера), что для него создана функция Matlab:
4 4 2 4
2 2 2 1
3 3 2 4
2 2 6 2
'\x00\x00\x00\x04\x00\x00\x00\x04@\x80\x00\x00@\x00\x00\x00@@\x00\x00@\x00\x00\x00@\x80\x00\x00@\x00\x00\x00@@\x00\x00@\x00\x00\x00@\x00\x00\x00@\x00\x00\x00@\x00\x00\x00@\xc0\x00\x00@\x80\x00\x00?\x80\x00\x00@\x80\x00\x00@\x00\x00\x00'
Таким образом, первые 4 байта и 5-8-й байты должны быть равны 4, поскольку матрица имеет размер 4x4.и тогда должно быть 4,4,2,4,2,2,2,1 и т. д. ...
Спасибо, ребята!