在Matlab和C++中读取原始数据文件,得到不同的值

3
我是一个有用的助手,可以翻译文本。
我正在将一些代码从我不熟悉的Matlab转换为C ++。 代码的一部分读取原始数据文件,并将每8位输入到矩阵的一个元素中。
header=fread(fid, 512, '*uint8');

同样地,在C++中我有:
fread(&q1[0][0], sizeof(uint8_t), 512, filepath);

当然,这两个正在读取同一个文件,它们输出的值匹配,直到第33个元素。
10
0
0
0
244
1
0
0
10
0
0
0
244
1
0
0
10
0
0
0
244
1
0
0
10
0
0
0
208
7
0
0

然后,我的 C++ 程序输出了“92”,而我的 Matlab 代码输出了“180”。数值开始分歧。
C++ / MATLAB
92 / 180
58 / 118
230 / 219
60 / 133

“并继续进行,而不匹配其余的512字节。”“有什么想法是什么原因导致这种情况?”

2
最初的想法是:你在C++中为数组分配的内存不足,并且超出了范围。考虑使用一个可以自动调整大小的良好标准容器。 - Lightness Races in Orbit
“q1” 是如何被打印的?提供源代码对于定义和打印算法都会有帮助。 - Jollymorphic
uint8_t 被定义为 char,我不确定还有其他方法可以这样做,q1 是一个拥有超过 1000 列和行的二维数组。我应该发布更多源代码,但不幸的是我周末不在办公室。如果有人对发生了什么有任何猜测,仍然非常感激。 - andrw
2个回答

1

你在C++中打开文件时是否使用了二进制文件的“b”选项?默认情况下是“t”,文本模式,它会以不同的方式解释换行符/回车符。

编辑:假设这是Windows。如果不是Windows,则可以忽略此内容。


0
原来,Matlab对我发送的原始文件进行了预处理,这改变了文件头。尽管这些文件在Windows中被视为“副本”,但它们的文件头不同,在打印原始数据开头时会给出不同的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接