Matlab从fread返回字节

Matlab从fread返回字节,matlab,binary-data,Matlab,Binary Data,我正在尝试读取以等距块保存在文件中的二进制数据。每个数据块都以一个记录头开始,该记录头包含有关读取文件的变量信息。标头的大小始终为常量(以字节为单位)。然后,我读取头数据以确定数据块中有什么以及如何读取它。对于大多数数据块,大部分标头未使用。在python中,它如下所示: headerBytes = in_file.read(rSize) aCode = unpack('1i', headerBytes[0:4]) bCode = unpack('1i', headerBytes[4:8]) .

我正在尝试读取以等距块保存在文件中的二进制数据。每个数据块都以一个记录头开始,该记录头包含有关读取文件的变量信息。标头的大小始终为常量(以字节为单位)。然后,我读取头数据以确定数据块中有什么以及如何读取它。对于大多数数据块,大部分标头未使用。在python中,它如下所示:

headerBytes = in_file.read(rSize)
aCode = unpack('1i', headerBytes[0:4])
bCode = unpack('1i', headerBytes[4:8])
....
subcase = unpack(str(len(headerBytes[aCode:bCode]))+'s',headerBytes[aCode:bCode])
aCode = fread(fid, 1, 'int');
bCode = fread(fid, 1, 'int');
.... <Conditional statements including fread, fseek, etc to further process
subcase = fread(fid, bCode - aCode, 'char');
header = fread(fid, 584, 'char');
aCode = typecast(header(1:4), 'int32');

我可以在C++中使用类似的代码,从二进制文件中读取字符数组中的“代码> RealTeCase<代码”。正如您所看到的,存储在报头中的信息取决于报头本身中以前的信息

在Matlab中,我正在努力处理
fread
,读取整个标题,然后对其进行处理。问题是,我还没有找到一个好方法来返回稍后要进行后处理的字节。我最好是这样的:

headerBytes = in_file.read(rSize)
aCode = unpack('1i', headerBytes[0:4])
bCode = unpack('1i', headerBytes[4:8])
....
subcase = unpack(str(len(headerBytes[aCode:bCode]))+'s',headerBytes[aCode:bCode])
aCode = fread(fid, 1, 'int');
bCode = fread(fid, 1, 'int');
.... <Conditional statements including fread, fseek, etc to further process
subcase = fread(fid, bCode - aCode, 'char');
header = fread(fid, 584, 'char');
aCode = typecast(header(1:4), 'int32');

这样做失败的原因不是生成单个数字,而是生成一个大小为8x1的向量。如何在Matlab中读取和返回一大块二进制数据(字节),比如Python和C++?

< P>你的问题是因为你正在读取字节并将它们转换成代码语句中的双倍。所以
header(1:4)
是4个双精度,转换为
int32
可以得到8个值

读取数据的正确方法是

header=fread(fid,584,'*uint8');
类型中的
*
表示输出数组应为同一类型。它相当于
'uint8=>uint8'
'uint8'
本身相当于
'uint8=>double'
=>
部分后面的类型是输出数组的类型

如果愿意,您可以使用
uchar
而不是
uint8
,尽管我更喜欢远离
char
类型,因为它们有时是16字节

有关更多信息,请参阅