【发布时间】:2012-07-17 14:11:09
【问题描述】:
我已尽力在 Google 上搜索,但无法以显示类型转换的表格形式找到明确的答案。
我想转换这些类型的原因是因为我正在使用 Android NDK 从本机代码调用函数。问题是原生代码调用了Java中不存在的不同类型。
我其实没有C的经验,快速看代码就发现了这几种类型。请随时编辑此帖子以添加要转换的不同类型。
From C to Java
long ->
short ->
char ->
unsigned long ->
unsigned short ->
unsigned char ->
byte ->
Int8 ->
Int16 ->
Int32 ->
UInt8 ->
UInt16 ->
UInt32 ->
另外,如果其中任何一个不能转换成 Java 类型,请解释原因。
【问题讨论】:
-
Android Dalvik VM 是一个只有 32 位的 VM,所以转换应该是微不足道的。另见stackoverflow.com/a/11527544/841108
-
按照this Java Tutorial page,指定宽度的有符号类型应该映射到
byte、short和int。至于其他人,找出答案的方法是打印出sizeof(long)等人的内容。告诉您何时在目标设备上运行。 (C 数据类型的宽度在某种程度上是特定于编译器和体系结构的。) -
但是
<stdint.h>给出了 C99 已知宽度的整数类型。 -
您应该在界面中正确使用 j- 类型(jint 等) - 级 jni 代码。适应 java 的需求取决于 C,而不是相反。
-
@BasileStarynkevitch 无论如何都应该在所有 C 代码中使用它以实现可移植性。
标签: java android c type-conversion android-ndk