首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓真的没有wchar_t吗?

安卓真的没有wchar_t吗?
EN

Stack Overflow用户
提问于 2011-04-12 04:01:12
回答 1查看 8.7K关注 0票数 7

我构建了一个简单的方法,如下所示

代码语言:javascript
复制
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,真的吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-04 14:41:44

这有点老了,但我是在寻找解决方案的时候就这样做的。

看来NDK (我的r8d)仍然不支持wsprintf:参见问题代码

在我的例子中,我使用libjson (考虑切换到yajl)来实现iOS/Android共享本地代码。

在我切换库之前,NDK的解决方法是:

代码语言:javascript
复制
double value = 0.5; // for example
std::wstringstream wss;
wss << value;
return json_string(wss.str());

我读过,流比C函数慢,如果您需要纯C(而不是C++)解决方案,它不会有帮助,但也许有人会发现这很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5630255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档