首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将java中的byte[]转换为C++中的unsigned char*,反之亦然,这是正确的方法吗?

将java中的byte[]转换为C++中的unsigned char*,反之亦然,这是正确的方法吗?
EN

Stack Overflow用户
提问于 2013-05-21 17:51:09
回答 2查看 43.7K关注 0票数 33

我是C++和JNI的新手,我试图找到一种正确的方法来将java中的byte[]转换成C++中的unsigned char*,反之亦然!(我在android上工作)在谷歌寻找了一个解决方案之后,我还没有找到一个很好的细节方法来将java中的byte[]转换为C++。请帮助我,并提供反之亦然的解决方案( C++中的unsigned char*到java中的byte[] )。非常感谢

java中的

  • byte[]转换为C++:

中的unsigned char*

JAVA :

代码语言:javascript
复制
private static native void nativeReceiveDataFromServer(byte[] value, int length);

JNI:

代码语言:javascript
复制
... (JNIEnv* env, jobject thiz, jbyteArray array, jint array_length)
{
    ???
}

PS:我修改了我的问题,因为我的问题是一个真正的问题:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-21 18:44:25

您可以使用它将unsigned char数组转换为jbyteArray

代码语言:javascript
复制
jbyteArray as_byte_array(unsigned char* buf, int len) {
    jbyteArray array = env->NewByteArray (len);
    env->SetByteArrayRegion (array, 0, len, reinterpret_cast<jbyte*>(buf));
    return array;
}

以另一种方式转换...

代码语言:javascript
复制
unsigned char* as_unsigned_char_array(jbyteArray array) {
    int len = env->GetArrayLength (array);
    unsigned char* buf = new unsigned char[len];
    env->GetByteArrayRegion (array, 0, len, reinterpret_cast<jbyte*>(buf));
    return buf;
}
票数 78
EN

Stack Overflow用户

发布于 2019-04-05 00:50:44

数组buf是堆栈上的一个变量。在离开函数之后,这个变量是未定义的。

一个解决方案是将这个函数分成两部分,一个用来计算大小,另一个用指针指向现在分配的数组作为参数来填充值。

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

https://stackoverflow.com/questions/16667029

复制
相关文章

相似问题

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