-1

x86 および x64 プラットフォーム用の win32 アプリケーションを開発しました。ARM プラットフォームで同じアプリケーションを使用したいと考えています。エンディアンは ARM プラットフォームによって異なります。つまり、ARM プラットフォームは一般にビッグ エンディアン形式を使用します。したがって、デバイスのアプリケーションでこれを処理したいと考えています。

たとえば // x86/x64 では、 int nIntVal = 0x12345678
ARM では、 int nIntVal = 0x78563412

次のデータ型の値は ARM にどのように格納されますか?

  1. ダブル
  2. char 配列、すなわち char chBuffer[256]
  3. int64

これを明確にしてください。

よろしく、 ラフェル

4

4 に答える 4

0

(上記の Sergey L. は、ほとんどの場合、バイト オーダーを気にする必要はないと言っています。少なくとも 1 つの例外を除いて、彼は正しいです: あるプラットフォームから別のプラットフォームにバイナリ データを変換する必要があると仮定しました ... )

http://en.wikipedia.org/wiki/Endiannessに概要があります。

要するに:

  • リトル エンディアンとは、最下位バイトが最初に (最下位アドレスに) 格納されることを意味します。
  • ビッグ エンディアンは、最上位バイトが最初に格納されることを意味します

配列要素が格納される順序は影響を受けません (もちろん、配列要素のバイト順は影響を受けます)。

そう

  • char 配列は変更されません
  • int64 - x86 と比較してバイト順が逆になっています

浮動小数点形式については、http://en.wikipedia.org/wiki/Endianness#Floating-point_and_endiannessを検討してください。一般に、整数形式と同じエンディアン規則に従うように見えますが、古い ARM プラットフォームには例外があります。(私はそれを直接経験したことはありません)。

一般的に、最初に制御された実験によってプリミティブ型の変換をテストすることをお勧めします。

また、コンパイラが構造体で異なるパディングを使用する可能性があることも考慮してください (まだ対処していないトピック)。

お役に立てれば。

于 2013-08-07T10:02:07.520 に答える