我正在用 C 编写 Adobe AIR 的本机扩展。代码应该稍后移植到其他平台。在我在 C 端的函数中,我从空气中得到一个字符串,就像这样
uint32_t len;
const uint8_t * str = 0;
if( FRE_OK == FREGetObjectAsUTF8(argv[0], &len, &str) )
{
//Here i need to pass a string as an argument to other function
printf("Got string %s", str); //Showing weird letters instead of str
}
FREGetObjectAsUTF8 返回一个 UTF8 编码的字符串,应该表示为 const uint8_t。我在 MacOS 和 XCode 中工作,并且 uint8_t 被定义为无符号字符。问题出在一堆 c 代码中,它们需要一个简单的 char* 作为参数。我不需要任何来自 unicode 的字母,我只使用拉丁字母和数字。
我试图铸造一种没有运气的类型。例如
char buffer[512];
sprintf(buffer, "%s", (char*)str); //Same weird letters here
但是如果我遍历字符串,我会得到正确的值
for(i=0; i<len; i++)
printf("%s", str[i]); // Normal value
所以 mu 问题是:如何将 utf8 字符串传递给需要简单签名字符的函数?事实上,我可以尝试在 C++ 中创建函数并将 C 部分与“extern”一起使用,但纯 C 解决方案会更可取。
我从空中传递字符串“initapp”,如果我将它返回到运行时,它会显示正确的值“initapp”。在我的 C 代码中,我试图将它传递给期望 char* 作为参数的函数
FREObject initApp(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
uint32_t len;
const uint8_t * str = 0;
if( FRE_OK == FREGetObjectAsUTF8(argv[0], &len, &str) )
{
/*
I have about 40 functions and most of them working with ASCII strings
*/
executeCommand( (const char*)str );
FREObject result;
FRENewObjectFromUTF8(len, str, &result);
return result; //It's ok. Correct string
}
return NULL;
}
但是在我的函数而不是“initapp”中,我得到了各种奇怪的字母(每次都不一样),比如试图输出图像的某些部分或不正确的变量。
任何帮助将不胜感激。