只是在 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(' ');
希望也能帮助别人。干杯