我正在将iOS 5.0应用程序迁移到Android 2.3.3。
此iOS应用程序具有使用某些uint32_t变量的加密算法。
我在stdin.h上发现了这个:
#ifndef _UINT32_T
#define _UINT32_T
typedef unsigned int uint32_t;
#endif /* _UINT32_T */
uint32_t
是Objective-C中的unsigned int
,因此Java
中的等效内容为long
。这是对的吗?
我的问题是:
是int,char,long等。目标C类型在Android上具有相同的内存表示吗?
答案 0 :(得分:2)
没有。 Android(Java)没有无符号变量类型。
因此,如果您需要存储一个C无符号32位整数,那么您需要在Java中使用long,但这将是64位(这样您就可以存储uint32的完整精度)。
相反,任何已签名的表示都将具有相同的内存布局(但我不确定字节顺序,您应该自己检查它。)
除非您选择在Android中使用C / C ++并跳过Java(这可以完成但您需要在任何情况下都需要使用JNI将API调用桥接到Java),否则这是真的。
为了解决类似的问题,我找到了一个名为 Javolution 的库,它能够通过保持相同的布局为C结构提供良好的实现,看看here。但我正在处理结构,而不是普通的变量,所以这对你不起作用。