只是在SWIG周围玩游戏并且在未打开的字符的情况下粘贴在字体图上。 我需要在C#中将以下uint指针作为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 ++转换器,coz 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(' ');
希望也可以帮助别人。干杯