Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将java中的字节[]转换为C+中的无符号字符*的正确方法+;,反之亦然? 我是C++和JNI的新手,我尝试找到一个正确的方法,用JNI将java中的字节[]转换成C++中的无符号char,反之亦然!(我在安卓上工作) 在谷歌中寻找解决方案之后,我还没有找到一个好的细节方法来将java中的字节[]转换成C++。请帮助我,并提供一个解决方案,反之亦然(未签名的char *在C++中以字节[]在java中)。非常感谢 java中的字节[]到C++中的无符号字符*:_Android_C++_Java Native Interface - Fatal编程技术网

Android 将java中的字节[]转换为C+中的无符号字符*的正确方法+;,反之亦然? 我是C++和JNI的新手,我尝试找到一个正确的方法,用JNI将java中的字节[]转换成C++中的无符号char,反之亦然!(我在安卓上工作) 在谷歌中寻找解决方案之后,我还没有找到一个好的细节方法来将java中的字节[]转换成C++。请帮助我,并提供一个解决方案,反之亦然(未签名的char *在C++中以字节[]在java中)。非常感谢 java中的字节[]到C++中的无符号字符*:

Android 将java中的字节[]转换为C+中的无符号字符*的正确方法+;,反之亦然? 我是C++和JNI的新手,我尝试找到一个正确的方法,用JNI将java中的字节[]转换成C++中的无符号char,反之亦然!(我在安卓上工作) 在谷歌中寻找解决方案之后,我还没有找到一个好的细节方法来将java中的字节[]转换成C++。请帮助我,并提供一个解决方案,反之亦然(未签名的char *在C++中以字节[]在java中)。非常感谢 java中的字节[]到C++中的无符号字符*:,android,c++,java-native-interface,Android,C++,Java Native Interface,JAVA: private static native void nativeReceiveDataFromServer(byte[] value, int length); JNI: ... (JNIEnv* env, jobject thiz, jbyteArray array, jint array_length) { ??? } PS:我修改了我的问题,因为它是我问题的真实问题:(你可以用它将无符号字符数组转换成jbyteraray jbyteArray as_byte_ar

JAVA:

private static native void nativeReceiveDataFromServer(byte[] value, int length);
JNI:

... (JNIEnv* env, jobject thiz, jbyteArray array, jint array_length)
{
    ???
}

PS:我修改了我的问题,因为它是我问题的真实问题:(

你可以用它将
无符号字符
数组转换成
jbyteraray

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;
}
jbyterarray作为字节数组(无符号字符*buf,int len){
jbyterarray=env->newyterarray(len);
env->SetByteArrayRegion(数组,0,len,重新解释(buf));
返回数组;
}
要转换为另一种方式

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;
}
unsigned char*as_unsigned_char_数组(jbyterarray){
int len=env->GetArrayLength(数组);
无符号字符*buf=新的无符号字符[len];
env->GetByteArrayRegion(数组、0、len、重新解释(buf));
返回buf;
}

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


一个解决方案是将这个函数分成两个,一个是用大小来计算,另一个是指针,现在把分配的数组作为参数填充在值中。当然,它是。你不能在C++中写C++。不是真正的问题。“我是C++中的新手,JNI,我尝试通过使用JNI找到一个正确的方式来将java中的字节[b]转换成未签名的char,反之亦然!……如果我错了请纠正我,并提供一个相反的解决方案(java中的C++中的无符号char C++ to字节)“你能帮我吗?我认为你不应该降低我的观点,如果你还没有读到所有的问题!我觉得你好像在用C编译器编译C++代码。我在谷歌上搜索了一些帖子,看到他们可以使用“新”。在jni中。但是我还没有找到解决方案!如果你能提供给我使用新的或它不能使用的解决方案?@Zharf你能帮我吗?我不知道我转换字节[]的解决方案在java中C++是好的还是不好的,我在搜索,如果你能的话,请帮帮我!下面的解决方案怎么样?它比你的更好吗?<代码> JByth*CordNoTrime=(*Env)-> GETBYTAREAREAR元素(Env,数组,NULL);//IF(Cordon数组= = null)//Read 0;(content\u array,array\u length);(*env)->ReleaseByteArrayElements(env,array,content\u array,JNI\u ABORT);工作原理基本相同。区别在于,在代码中,您为本机代码提供了一个缓冲区,在我的版本中,本机代码创建了缓冲区。这取决于用例。@Zharf,“buf”是什么意思在as_unsigned_char_array()中释放?@ransh它不是,在不再需要它之后需要手动删除。当然,一些人可能更喜欢智能指针。它是否可以与const char*而不是unsigned char*一起工作?