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_tunsigned intObjective-C の であるため、同等のものはJavaですlong。これは正しいです?

私の質問は:

int、char、long などの Objective-C 型は、Android で同じメモリ表現を持っていますか?

4

1 に答える 1

2

いいえ。Android (Java) には符号なし変数型はありません。

したがって、C の符号なし 32 ビット整数を格納する必要がある場合は、Java で long を使用する必要がありますが、これは 64 ビットになります (uint32 の完全な精度を格納できるようにするため)。

代わりに、符号付き表現は同じメモリ レイアウトになります (ただし、エンディアンについてはわかりません。自分で確認する必要があります)。

これは、Android で C/C++ を使用し、Java をスキップすることを選択しない限り当てはまります (これは可能ですが、いずれにしても JNI を使用して Java への API 呼び出しをブリッジする必要があります)。

同様の問題を解決するために、同じレイアウトを維持することで C 構造体の適切な実装を提供できるJavolutionというライブラリを見つけました。こちらをご覧ください。しかし、私は単純な変数ではなく構造体を扱っていたので、これはうまくいきませんでした。

于 2012-06-04T14:12:04.180 に答える