与此 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);
}
}
如果您对上述代码有任何疑问,请告诉我。
在我的项目中,我负责将一些 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);
}
}
如果您对上述代码有任何疑问,请告诉我。