【问题标题】:Why char is stored as 2 bytes in Matlab S-Function为什么char在Matlab S-Function中存储为2个字节
【发布时间】:2020-03-21 14:36:04
【问题描述】:

我想将一个 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 s-function


    【解决方案1】:

    MATLAB 对字符向量和字符串使用 UTF-16 编码。例如,将definition of matlab::engine::String 视为std::basic_string<char16_t>。这在所有平台上都是一样的。我不知道 MATLAB 何时引入了 Unicode 支持,但您可以假设过去 15 年的任何版本都使用 16 位字符编码。

    考虑使用 mxGetString 来获取字符串的 8 位 (ASCII) 表示,如果需要支持 Unicode 字符,请考虑使用 mxArrayToString

    【讨论】:

    • 我正在传输一些具有 uint8 数据类型的数组。不幸的是,MATLAB 可以在没有 TLC 的情况下将字符串或双精度数作为 S-Function 参数传输。使用上述方法我可以直接取回数字。这样做会导致哪些陷阱?
    • @OHLÁLÁ 数据在哪里生成以及在哪里使用?如果它仅在 C 端生成和使用,那么您当然可以这样做。如果您在 MATLAB 端生成或使用它,我会坚持使用双打。 uint8char 之间的转换可能比在任何地方都使用双精度值更昂贵。
    • 我在 Matlab 初始化时将 uint8 转换为 char 一次,将其作为参数传递给 S-Function 并在那里使用。
    猜你喜欢
    • 2014-02-08
    • 2022-07-12
    • 2011-04-26
    • 2019-08-12
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多