我构建了一个简单的方法,如下所示
wchar_t buf[1024] = {};
void logDebugInfo(wchar_t* fmt, ...)
{
va_list args;
va_start(args, fmt);
vswprintf( buf, sizeof(buf), fmt, args);
va_end(args);
}
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
logDebugInfo(L"test %s, %d..", L"integer", 10);
return (*env)->NewStringUTF(env, buf);
}我接到警告
在函数'Java_com_example_hellojni_HelloJni_stringFromJNI':中 警告:从不兼容的指针类型传递'logDebugInfo‘的参数1 注:预期的'wchar_t *‘,但参数的类型是’无符号int *‘
结果字符串是不正确的。如果我在格式化字符串之前去掉了L前缀,奇怪,它起作用了。但是L前缀在我的遗留代码中到处使用。
首先,我知道wchar_t没有足够的可移植性,而且非常特定于编译器。我预期的wchar_t大小应该是16位。我读到了其他一些帖子,其中说安卓是32位,但是官方的NDK提供了wchar.h,它说wchar_t == char,真的吗?
发布于 2013-03-04 14:41:44
这有点老了,但我是在寻找解决方案的时候就这样做的。
看来NDK (我的r8d)仍然不支持wsprintf:参见问题和代码。
在我的例子中,我使用libjson (考虑切换到yajl)来实现iOS/Android共享本地代码。
在我切换库之前,NDK的解决方法是:
double value = 0.5; // for example
std::wstringstream wss;
wss << value;
return json_string(wss.str());我读过,流比C函数慢,如果您需要纯C(而不是C++)解决方案,它不会有帮助,但也许有人会发现这很有用。
https://stackoverflow.com/questions/5630255
复制相似问题