【问题标题】:Reading raw data file, getting different values in Matlab and C++读取原始数据文件,在 Matlab 和 C++ 中获取不同的值
【发布时间】:2011-06-18 00:24:57
【问题描述】:

我正在将一些代码从 Matlab(我不熟悉)转换为 C++。部分代码读入原始数据文件,每 8 位输入一个矩阵元素。

MATLAB:

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 个字节。

关于什么可能导致这种情况的任何想法?

【问题讨论】:

  • 初步想法:您没有为 C++ 中的数组分配足够的内存,并且正在溢出。考虑一个可以为您自动调整大小的体面的标准容器。
  • ...“q1”是如何打印的? Source 对定义和打印算法都有帮助。
  • uint8_t 是 typdef'd 作为字符,我不知道该怎么做,而 q1 是一个二维数组,有超过 1000 列和行。我应该发布更多资源,不幸的是我周末不在办公室。如果有人对发生的事情有任何猜测,仍然非常感谢。

标签: c++ c matlab


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    事实证明,Matlab 正在预处理我发送的原始文件,这改变了标题。尽管这些文件是“副本”(就 windows 而言),但它们的标题不同,在打印出原始数据的开头时给了我不同的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 2019-04-02
      • 2014-11-29
      • 2016-02-02
      • 1970-01-01
      相关资源
      最近更新 更多