“Java Native Interface Programmer's Guide and Specification”一书的第3章,说“原始类型的映射很简单”,我对这句话有点困惑。我们知道c数据类型的大小是不确定的,它取决于程序运行、编译的环境……比如int类型的大小可能是2字节或4字节。但是java数据类型的大小是确定的。int的大小是4个字节。
那么,jni如何清楚地映射java和c/c++之间的数据类型。
任何答案将不胜感激!
“Java Native Interface Programmer's Guide and Specification”一书的第3章,说“原始类型的映射很简单”,我对这句话有点困惑。我们知道c数据类型的大小是不确定的,它取决于程序运行、编译的环境……比如int类型的大小可能是2字节或4字节。但是java数据类型的大小是确定的。int的大小是4个字节。
那么,jni如何清楚地映射java和c/c++之间的数据类型。
任何答案将不胜感激!
好吧,在 C 中,有一个名为的模块stdint.h
定义了类型int64_t
、int32_t
和朋友,这确实使映射“简单明了”。
但是您应该注意到,在 C 的任何特定实现中,plain old 的大小int
都没有准确指定。作者确实对“直截了当”这个词非常松散,并假设您会将其理解为类似于“Javaint
映射到 32 位的 C 有符号整数类型”。
jni.h头文件定义了适当的原始类型:jint、jlong、jchar 等。这些被声明为与相应的 Java 原语的大小相匹配。在您的 JNI 代码中使用这些。