与此 MATLAB 代码等效的 C++ 是什么?

What is the C++ equivalent to this MATLAB code?

在我的项目中,我负责将一些 MATLAB 代码迁移到 C++。下面的代码是指从计算机到微控制器的串行通信。函数 CreatePackage 生成一个包,然后使用 MATLAB 的 fwrite(serial) 函数将其发送到微控制器。

function package = CreatePackage(V)
for ii = 1:size(V,2)
    if V(ii) > 100
        V(ii) = 100;
    elseif V(ii) < -100
        V(ii) = -100;
    end
end

vel = zeros(1, 6);
for ii = 1:size(V,2)
    if V(ii) > 0
        vel(ii) = uint8(V(ii));
    else
        vel(ii) = uint8(128 + abs(V(ii)));
    end
end

package = ['BD' 16+[6, vel(1:6)], 'P' 10 13]+0;

然后,发送包裹:

function SendPackage(S, Package)

for ii = 1:length(S)
    fwrite(S(ii), Package);
end

如何在 C++ 中创建一个 array/vector 来表示上面 MATLAB 代码中使用的 package 变量?

我没有使用 MATLAB 的经验,因此非常感谢任何帮助。

谢谢!

package 变量在您的 MATLAB 代码中被流式传输为 12 个无符号 8 位整数,因此我会在 C++ 中使用 char[12] 数组。您可以在您的平台上仔细检查 sizeof(char) 以确保 char 只有 1 个字节。

是的,MATLAB 默认数据类型是 double,但这并不意味着您的向量 V 未填充整数值。您必须查看此数据或设备的规格才能弄清楚。

无论输入什么值,您都是 setting/clipping 传出范围到 [-100, 100],然后将它们偏移到字节范围 [0, 255]。

如果您对 MATLAB 了解不多,您可以利用您从 C++ 中了解的知识并使用 C 作为过渡。 MATLAB 的 fwrite 功能与 C 的功能一致,您可以使用 #include<cstdio.h> 预处理器指令将这些函数包含在 C++ 中。

这是一个示例解决方案:

#include <cstdio.h>    // fwrite 
#include <algorithm>  // min, max
...

void makeAndSendPackage(int * a6x1array, FILE * fHandles, int numHandles){

   char packageBuffer[13] = {'B','D',24,0,0,0,0,0,0,'P','\n','\r',0};

   for(int i=0;i<6;i++){
       int tmp = a6x1array[i];
       packageBuffer[i+3] = tmp<0: abs(max(-100,tmp))+144 ? min(100,tmp)+16;
   }

   for(int i=0;i<6;i++){
       fwrite(fHandles[i],"%s",packageBuffer);
   }

}

如果您对上述代码有任何疑问,请告诉我。