【发布时间】: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 中以最大精度打印浮点数,例如逗号分隔)