[英]JNI converting native unsigned char arry to jbyte array
Í have JNI function that needs to return a jbyte array. Í有JNI函数需要返回一个jbyte数组。 The array contains byte data of ac struct with data.
该数组包含带有数据的ac结构的字节数据。 But i get an error when i pass the data form the unsinged char array to the jbyte array.
但是当我将unsinged char数组中的数据传递给jbyte数组时,我收到错误。
The C struct is defined as followed: C结构定义如下:
// ObjectInfo struct definition
struct ObjectInfo {
int ObjectXCor;
int ObjectYCor;
int ObjectMass;
};
// ObjectInfo struct definition
struct SensorDataStruct{
int PingData;
int IRData;
int ForceData;
int CompassData;
};
// ObjectInfo struct definition
union PackedSend{
struct CommStruct{
ObjectInfo VisionData;
SensorDataStruct SensorData;
} CommData;
unsigned char bytes[28];
}SendData;
The JNI method is defined as followed: JNI方法定义如下:
JNIEXPORT jbyteArray JNICALL Java_com_example_communicationmodule_MainActivity_Convert(
JNIEnv *env, jobject,
jint var1,
jint var2,
jint var3,
jint var4,
jint var5,
jint var6,
jint var7)
{
// Array to fill with data
jbyteArray Array;
// Init java byte array
Array = env->NewByteArray(28);
SendData.CommData.SensorData.PingData = var1;
SendData.CommData.SensorData.IRData = var2;
SendData.CommData.SensorData.ForceData = var3;
SendData.CommData.SensorData.CompassData = var4;
SendData.CommData.VisionData.ObjectXCor = var5;
SendData.CommData.VisionData.ObjectYCor = var6;
SendData.CommData.VisionData.ObjectMass = var7;
//Put the native unsigned chars in the java byte array
for(int Index=0; Index < 28; Index++){
Array[Index] = SendData.bytes[Index];
}
// Return java array
return Array;
}
The error that i get is: jni/HelperFunctions.cpp:44:38: error: no match for 'operator=' in '*(Array + ((unsigned int)Index)) = SendData.PackedSend::bytes[Index]' 我得到的错误是:jni / HelperFunctions.cpp:44:38:错误:'*(数组+((无符号整数)索引)中的'operator ='不匹配)= SendData.PackedSend :: bytes [Index] “
My question is wat is the proper way to convert the native unsigned char array to the a jbyte array? 我的问题是wat是将原生unsigned char数组转换为jbyte数组的正确方法吗? Doe anyboy have a suggestion?
Doe anyboy有什么建议吗? All tips are welcome!
欢迎所有提示!
After casting to (jbyte) i get the the following errors: jni/HelperFunctions.cpp:54:46: error: no match for 'operator=' in '*(Array + ((unsigned int)Index)) = (jbyte)SendData.PackedSend::bytes[Index]' jni/HelperFunctions.cpp:54:46: note: candidate is: C:/android-ndk-r9/platforms/android-8/arch-arm/usr/include/jni.h:66:7: note: _jbyteArray& _jbyteArray::operator=(const _jbyteArray&) 在转换为(jbyte)之后,我得到以下错误:jni / HelperFunctions.cpp:54:46:错误:'*(数组+((unsigned int)索引)中的'operator ='不匹配)=(jbyte) SendData.PackedSend :: bytes [Index]'jni / HelperFunctions.cpp:54:46:注意:候选者是:C:/ android-ndk-r9 / platforms / android-8 / arch-arm / usr / include / jni。 h:66:7:注意:_jbyteArray&_jbyteArray :: operator =(const _jbyteArray&)
The casting code is as followed: 演员代码如下:
//Put the native unsigned chars in the java byte array
for(int Index=0; Index < 28; Index++){
Array[Index] = (jbyte) SendData.bytes[Index];
}
Does anybody have a idea or suggestion? 有人有想法或建议吗? Everthing is welcome!
欢迎外行!
env->SetByteArrayRegion(Array, 0, 28, (jbyte*)SendData.bytes)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.