0

UInt32*として格納されている16進値の束があります

  • 2009-08-25 17:09:25.597パーティクル[1211:20b] 68000000
  • 2009-08-25 17:09:25.598パーティクル[1211:20b] A9000000
  • 2009-08-25 17:09:25.598パーティクル[1211:20b] 99000000

そのままintに変換すると、0から255の範囲であるはずなのに、非常識な値になると思います。最初の2桁を抽出するだけでよいと思います。どうすればよいですか?1000000で割ってみましたが、16進数ではうまくいかないと思います。

4

5 に答える 5

3

各値が255未満であり、投稿したサンプルデータに最上位バイトのみが設定されているため、エンディアンが混同されているように見えます。ビッグエンディアン番号をロードしてからリトルエンディアンとして解釈したか、またはその逆です。バイトの順序が間違った順序になります。

たとえば、ビッグエンディアンマシンに32ビットで格納された数値104があるとします。メモリでは、バイトは00 00 00 68になります。これをリトルエンディアンマシンのメモリにロードした場合、これらのバイトは68000000として解釈されます。

どこから番号を入手しましたか?それらをマシンバイトオーダーに変換する必要がありますか?

于 2009-08-26T00:14:55.523 に答える
2

Objective C は基本的に C に余分なものを追加したものです。通常のビット シフト操作 (my_int >> 24 など) が機能するはずです。

于 2009-08-26T00:27:01.010 に答える
1

これは絶対にエンディアンの問題のように聞こえます。そうであろうとなかろうと、単純なビットシフトが仕事をするはずです:

uint32_t saneValue = insaneValue >> 24;
于 2009-08-26T02:46:07.797 に答える
0

0x1000000 で割るとうまくいきます (つまり、10^6 ではなく、16^6 = 2^24 です)。これは、ビットを右に 24 シフトすることと同じです (ObjC の構文はわかりません。申し訳ありません)。

于 2009-08-26T00:20:49.100 に答える
0

関数を使用してみてくださいNSSwapInt()

int x = 0x12345678;
x = NSSwapInt(x);
NSLog (@"%x", x);

「78563412」と出力する必要があります。

于 2009-08-26T00:24:46.250 に答える