Matlab Coder를 사용하여 C 코드로 변환하는 일부 코드가 Matlab로 작성되었습니다.Matlab Coder를 사용하여 C 문자 배열을 Matlab String으로 변환
생성 된 C 코드에서 호출하고자하는 C 함수를 작성했습니다. 이 작품, 지금까지 너무 좋아.
C 함수의 매개 변수 중 하나는 문자열을 출력하는 데 사용되는 char **입니다.
나는 불투명 한 char *을 만들고 coder.wref를 사용하여 char **를 얻음으로써 이것을 수행한다. 하지만 불투명 한 char *을 Matlab 문자열로 변환하여 함수에서 반환 할 수있는 방법은 무엇입니까?
코드는 이런 식입니다 :
function [status,out] = cfun()
buf = coder.opaque('char *', 'NULL');
len = coder.opaque('size_t ', 'NULL');
status = 0;
status = coder.ceval('_cfun', coder.wref(buf), coder.wref(len));
out = buf; % How do I convert buf into a Matlab string here??
end
_cfun은 버피에 일부 데이터를 작성하고 렌으로 길이를 기록합니다.
현재 작동하는 My solution은 Matlab에서 문자 배열을 수동으로 만들고 데이터로 전송하는 것입니다. 예 :
length = cast(len, 'int32');
out = char(zeros(1,length+1));
for i = 1:(length+1)
out(i) = cast(buf(i), 'int32');
end
이렇게 생성 된 C 코드는 의미가없고 반복적으로 루프를 만들지 만 수동으로 작동하도록 업데이트 할 수 있습니다. 그러나 이것은 코드 생성을 다시 할 때마다 수동으로 업데이트해야합니다.
C 코드는 다음과 같습니다
는i18 = length + 1L;
copyfrom = (int)i18;
i = 1;
while (i <= copyfrom) {
source_str->data[0] = (signed char)(int)buf;
i = 2;
}
나는 일을 업데이트 할 수 있습니다 :
i18 = length + 1L;
copyfrom = (int)i18;
i = 1;
while (i <= copyfrom) {
source_str->data[i-1] = (signed char)(int)(buf[i-1]);
i = i+1;
}
그래서, 매트랩 문자열에 문자 * + 길이를 변환하는 방법이? 아니면 제가 시도하고있는 일을하는 더 좋은 방법이 있습니까?
호기심, 왜'길이가 + 1L;'에'L '이 있고 C 코드에 모든 캐스트가 있습니까? 'i18, length, copyfrom, i, source_str, buf'의 정의를 게시하여 whats가 진행되고 있는지 확인하는 것이 좋습니다. 그 포스트가 지금 서있을 때, 나는 그것이 불분명하다는 것을 발견한다. – chux
이것은 Matlab에서 생성 된 코드입니다. L과 캐스팅은 Matlab의 결정입니다. L은 정수 오버플로를 피하고 확인하는 것입니다 (코드에서 일부 검사를 제거했습니다). for 루프가 올바르게 생성되지 않은 이유를 디버깅하기를 원하지 않는 한 정의는 중요하지 않습니다. 하지만 아래의 답변은 작동하므로 더 이상 시간을 할애하지 않을 것입니다. –