matlab - 为什么char在Matlab S-Function中存储为2个字节
问题描述
我想将一个 uint8 数组作为参数传递给我的 S-Function:
inParam = char(uint8(1:7))
在 S-Function 我做了以下
UINT8_T *inParam = (UINT8_T *)mxGetPr(ssGetSFcnParam(S, PARAM_IN_PORT_NR)); //;
但我看到实际上数组元素存储为 2 个字节。
UINT16_T *inPorts = (UINT16_T *)mxGetPr(ssGetSFcnParam(S, PARAM_IN_PORT_NR)); //
// I can loop through the data
// This is only a snippet
*(inPorts++);
这是为什么?这是否发生在所有 Matlab 版本中?
解决方案
MATLAB 对字符向量和字符串使用 UTF-16 编码。例如,将matlab::engine::String 的定义视为std::basic_string<char16_t>
. 这在所有平台上都是一样的。我不知道 MATLAB 何时引入了 Unicode 支持,但您可以假设过去 15 年的任何版本都使用 16 位字符编码。
考虑使用mxGetString
获取字符串的 8 位 (ASCII) 表示,或者mxArrayToString
如果您需要支持 Unicode 字符。
推荐阅读
- powershell - 如何在 PowerShell 中创建目录和文件数组?
- c# - 将异步任务中声明的变量带到不同的类
- python - 具有基于多个日期的计算值的 Pandas DataFrame
- javascript - 优化 JavaScript 中的否定 OR 和运算符查询(Filter 方法)
- python - 使用 python/pandas 将任意多列转换为键值对
- python - 按数据框访问分组中的聚合值
- html - Flexbox 布局多个项目环绕一个大项目
- android - 按实现名称从外部下载 Gradle 依赖项而不使用 gradle
- node.js - 列出客户端在 Nodejs 中支持的所有 TLS 密码
- c# - ASP.NET:保存和显示从 URL 传递的值