【问题标题】:How transfer an array of integers from C to Matlab如何将整数数组从 C 传输到 Matlab
【发布时间】:2019-12-05 12:55:32
【问题描述】:

有没有一种简单的方法可以将整数数组从 C 程序传输到 matlab?我在网上找到了一些关于如何在 C++ 和 Matlab 之间进行操作的指南,但不是 C 到 Matlab。

我有几个用 C 语言编写的程序生成的 1180 个浮点数数组。现在我想在 Matlab 中可视化这些数据。我可以让 C 程序导出创建硬编码数组所需的 Matlab 代码,但这似乎是不必要的迂回。

我可以只使用 C++ 方法并使用 C++ 编译器编译我的 C 程序,但此时我只是好奇它是否也可以在 C 中完成。

Matlab 可以导入 .mat 文件,但是这些文件好像是加密的或者是二进制格式的。

请不要就如何在 C 中可视化数据提出建议,我必须在 Matlab 中进行。我在 Matlab 中有一段代码返回奇怪的结果,我用 C 编写了等效的代码,现在我想看看结果是否有差异。这样我就可以调试我的 Matlab 代码,因为最终结果必须以 Matlab 代码的形式提交。

到目前为止我的 C 代码。另外我在初始上传时犯了一个错误,我想传输一个整数数组。

FILE *f = fopen("Ps.bin", "wb");
for(int n = 1; n < N + 1; n++)
{
    converter.asInt = Ps[n];
    for(int i = 0; i < 4; i++)
    {
        fwrite(&converter.asBytes[i], sizeof(char), 1, f);
    }
}
fclose(f);

这是我在 matlab 中尝试过的,但都没有给出正确的结果。在所有情况下,matlab 都会制作一个双精度数组,我绝对不想要。它只是生成一个数组,其值是以下三个之一:0、0.0000 和 4.925。

Ps = fread(fopen('Ps.bin'))
Ps = fread(fopen('Ps.bin'), 1180)
Ps = fread(fopen('Ps.bin'), 1180, 'uint32')
Ps = fread(fopen('Ps.bin'), 1180, '2 * uint16')

【问题讨论】:

  • 为什么不简单地将浮点数写入二进制、文本或 C 中的任何文件并将其导入 MATLAB?
  • 您遇到的实际问题是什么?唯一似乎缺少的是您需要以 Matlab 可以理解的格式编写文件,而且您的 C++ 指南似乎已经解释了这一点。
  • 是的,但是 C++ 方法使用 C++ 库,我不能在 C 中使用。现在我只是好奇是否有任何在 C 中实现的简单方法。
  • 你可以read a 1 x N matrix (在这种情况下,请确保在 C 中以最大精度打印浮点数,例如逗号分隔)

标签: c arrays matlab transfer


【解决方案1】:

用 C 编写一个二进制文件(使用fwrite,看here)。在 matlab 中,您可以使用过程here (freadfunction) 读取它

【讨论】:

  • 我在最初的帖子中做了一些更改。由于某种原因,我无法让它工作。 C 部分工作正常,但 matlab 完全破坏了一切。
  • 当我将所有内容转换为浮动在 C 程序端时,它确实有效。不知何故,matlab 似乎无法解释包含整数的二进制文件,或者我做错了。
  • 您使用这种方式保存二进制文件有什么原因吗?为什么不直接使用 fwrite(Ps, sizeof(int), 1180, f); 保存它,然后在 Matlab 中使用 fread(fopen('Ps.bin'), 1180, 'int')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多