- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要使用 y=coder.ceval() 从 matlab 调用 c 函数,并从该函数返回一个字符串。但是 coder.ceval() 函数只允许我返回标量值。然而 String 是一个 char 数组,因此无法返回。 matlab函数中的代码如下:
function y = abc(param)
y = '';
if strcmp(coder.target,'rtw'),
y=coder.ceval('c-function',param);
end
end
有什么解决办法或解决方法吗?
期待获得一些帮助。非常感谢!
最佳答案
编辑
这是一种解决方法,您应该自行承担使用它的风险! ;)我的意思是,如果这真的是你最后的选择。
由于您没有指定字符串的类型,为简单起见,我假设它仅由大写字母 (AABBBCC) 组成。大写字母表示为 2 位十进制数字(A = 65,Z = 90,man ascii)。
该方法包括两个步骤:1)在通过 coder.ceval 调用的函数中,您应该从要返回的字符串构建标量值。 2)您必须根据标量值重建字符串。
下面的代码通过一个简单的例子说明了如何执行这两个步骤。请记住,这只是一个示例,您必须对其进行处理。例如,假设您需要返回字符串“ABC”,那么您可以返回由三个 2 位数字组成的标量“656667”:65=A、66=B、67=C。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int i, len, n;
// First convert a string in a scalar value
char str[] = {'A', 'B', 'C', '\0'};
printf("str = %s\n", str);
len = strlen(str);
for (i = 0; i < len; i++) {
n = str[i] + i*100;
}
printf("n = %d\n", n);
// You return a scalar that is composed by 65,66,67 ---> A,B,C
int y = 656667;
char num[100];
char letter[3];
// convert the number in a string
snprintf(num, 100, "%d", y);
printf("num = %s\n", num);
len = strlen(num);
printf("num len = %d\n", len);
// here we assume that the number of digits id even only ascii letters
if ((len%2) != 0) exit(1);
// Now we have to store the number of two digits as numbers and
// then convert the to char and finally append tehm to a string
int *ni = malloc((len/2)*sizeof(int));
char *string = malloc(len + 1);
// Here I use a lot of intermediate steps to make it clear
char c = 0;
for (i = 0; i < len/2; i+=1) {
snprintf(letter, 3, "%c%c", num[2*i], num[2*i+1]);
ni[i] = atoi(letter);
c = (char)ni[i];
printf("letter %d = %s, x = %d, c = %c\n", i, letter, ni[i], c);
string[i] = c;
printf("string[%d] = %c\n", i, string[i]);
}
// print the final string
string[len] = '\0';
printf("string = %s\n", string);
return 0;
}
小写字母从 97 开始,然后变成 3 位数字,但是通过使用一些 2 位数字的“特殊数字”,我们甚至可以决定读取字符串开头的 2 位数字和“特殊数字”后面的 3 位数字。
好吧,我不确定这是否有帮助,但至少,我希望您觉得它有趣。
关于c - 将数组返回到 coder.ceval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849723/
我需要使用 y=coder.ceval() 从 matlab 调用 c 函数,并从该函数返回一个字符串。但是 coder.ceval() 函数只允许我返回标量值。然而 String 是一个 char
related 我的目标是混合使用 C 代码和 Matlab 代码,并最终通过使用 Coder 工具让整个代码在 C 中运行。我找到了 2 种将 C 合并到 Matlab 中的方法,编写 Mex 文件
我正在使用 Simulink 设备驱动程序指南中所述的 Matlab 函数方法为 Arduino Due 编写一个 simulink 设备驱动程序 block 。当我想使用 coder.ceval()
我是一名优秀的程序员,十分优秀!