1

只是在 SWIG 周围玩耍并坚持使用类型图来获取 unsidned char。我需要以下 uint 指针作为 C# 中的 byte[]。

//C++
uint8_t* data;
//C#
ushort[] or byte[] data;

对于 Python,我发现了一些想法,但对 C# 实现没有了解。有人可以建议一个方向吗?提前致谢!

解决了:

感谢其他问题的标记,但我不认为它是重复的,因为它是为了清晰的 PI/Invoke 或 DLL 导入。我正在使用 SWIG 执行此操作,而与 DLL 导入和指针无关(SWIG 自己执行此操作)。但是如果有人有同样的问题,我会提出一些问题:首先,如果有人想尝试一下,可以查看更多类型映射:

%include "cpointer.i"
//%pointer_cast(unsigned char*,byte, convert_to_array)

或者

%include "carrays.i"
//%array_functions(unsigned char, ushort);

不确定它们应该如何工作,所以这是我的最终解决方案:为 SWIG 制作 C++ 转换器,因为 SWIG 使用正确的库将 char* 转换为字符串或字符串到字符串:

C++ 转换代码

std::string ConvertData(uint8_t &data)
{
    char* inner = (char*)malloc(sizeof(data));    
    std::string tmp ;    
    for (int i = 0; i < sizeof(data); i++)
    {
        sprintf(inner, "%02X ", data[i]);
        tmp += inner;

    return tmp;
}

我也需要一些格式,因为它最后用作 HEX。这种格式将实际数据字节分成 2 个字符,大写字母和它们之间的空格。

使用 SWIG 接口文件时,将其添加到 C++ 标头之前。这将告诉 SWIG 使用 std 库并正确使用字符串。您使用 char* 而不是 string 和 SWIG 的其他选项也将返回字符串。

%include "std_string.i" 

然后在 C# 或任何语言中,您可以根据需要使用您的字符串。我解析成空格所在的字符串数组。

C#

string[] tmp = ConvertData(parsedStringFromCPP).Split(' ');

希望也能帮助别人。干杯

4

0 回答 0