【发布时间】:2017-07-22 19:43:43
【问题描述】:
我正在编写一个 JNI。在那里,我的 Java 程序使用 ByteOutputStream() 获取一个 Image 字节数组,然后该数组用于调用 C 中的一个函数,该函数将字节数组转换为 unsigned char*。代码如下:
JNIEXPORT void JNICALL Java_ImageConversion_covertBytes(JNIEnv *env, jobject obj, jbyteArray array)
{
unsigned char* flag = (*env)->GetByteArrayElements(env, array, NULL);
jsize size = (*env)->GetArrayLength(env, array);
for(int i = 0; i < size; i++) {
printf("%c", flag[i]);}
}
我在编译时不断收到警告:
警告:使用 'jbyte *' 类型的表达式(又名 'signed char *')初始化 'unsigned char *' 会在指向具有不同符号的整数类型的指针之间转换 [-Wpointer-sign]
unsigned char* flag = (*env)->GetByteArrayElements(env, array, NULL);
如何删除此警告?我想打印所有字符。
【问题讨论】:
-
尝试
unsigned char* flag=>signed char* flag或显式转换指针(如果要打印,则只需使用带符号的字符) -
正如@Jean-FrançoisFabre 所写,使用
signed char *。实际上,这也是警告告诉你的。错误消息和警告不仅仅是胡言乱语,它们通常确实有意义。这个告诉你你正在用signed char *初始化unsigned char *。
标签: java c arrays java-native-interface