如何在clear C中编写android本机库?
我尝试写字节操作NOT。但是获取数组元素会遇到麻烦。
在C#中
private static byte[] NOT(byte[] b1)
{
byte[] result = new byte[b1.Length];
for (int i = 0; i < b1.Length; i++)
{
result[i] = (byte)(~b1[i]);
}
return result;
}
在AndroidStudio .cpp中我写道:
static jbyteArray byteNOT(JNIEnv *env,jbyteArray b1)
{
int lengthOfArray = env->GetArrayLength(b1);
jbyteArray ret = env->NewByteArray(lengthOfArray);
for(int i = 0;i<lengthOfArray;i++){
ret[i] = ~ ...
}
我该怎么做?
答案 0 :(得分:0)
看看这里,获取一个从Java获取数据并将其发回的示例代码。
http://jnicookbook.owsiak.org/recipe-No-013/
在你的情况下,你需要这样的东西:
/* get size of the array */
jsize len = (*env)->GetArrayLength(env, array);
/* get the body of array; it will be referecende by C pointer */
jbyte *body = (*env)->GetByteArrayElements(env, array, 0);
/* do some stuff */
for(int i=0; i < len; i++) {
printf("Byte value: %d\n", body[i]);
/* update value */
/* you will make negation here */
body[i] = 0;
}
/* release body when you decide it is no longer needed
Pass changes back to Java */
(*env)->ReleaseByteArrayElements(env, array, body, JNI_COMMIT);