0

我正在将 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 中是 a ,所以它在isunsigned int中的等价物。这个对吗?Javalong

我的问题是:

int、char、long 等 Objective-C 类型在 Android 上是否具有相同的内存表示?

4

1 回答 1

2

不,Android(即 Java)没有无符号变量类型。

因此,如果您需要存储一个 C 无符号 32 位整数,那么您需要在 Java 中使用 long ,但这将是 64 位(这样您就可以存储 uint32 的完整精度)。

相反,任何带符号的表示都将具有相同的内存布局(但我不确定字节顺序,您应该自己检查)。

这是真的,除非您选择在 Android 中使用 C/C++ 并跳过 Java(可以这样做,但无论如何您都需要使用 JNI 将 API 调用桥接到 Java)。

为了解决类似的问题,我找到了一个名为Javolution的库,它能够通过保持相同的布局为 C 结构提供良好的实现,看看这里。但我使用的是结构,而不是普通变量,所以这对你不起作用。

于 2012-06-04T14:12:04.180 回答