40

を使用して最初のバイトを取得できることを知っています

int x = number & ((1<<8)-1);

また

int x = number & 0xFF;

しかし、整数の n 番目のバイトを取得する方法がわかりません。たとえば、1234 は、32 ビット整数として 00000000 00000000 00000100 11010010 です。これらのバイトをすべて取得するにはどうすればよいですか? 最初の 1 つは 210、2 番目は 4、最後の 2 つは 0 になります。

4

4 に答える 4

82
int x = (number >> (8*n)) & 0xff;

ここで、n は最初のバイトが 0、2 番目のバイトが 1 などです。

于 2011-10-16T21:24:56.537 に答える
18

(n+1) 番目のバイトについては、メモリに表示される順序に関係なく (x86 などのリトルエンディアン マシンでは最下位から最上位):

int x = ((unsigned char *)(&number))[n];

ビッグ エンディアン マシンの最下位から最上位への (n+1) 番目のバイトの場合:

int x = ((unsigned char *)(&number))[sizeof(int) - 1 - n];

最下位から最上位への (n+1) 番目のバイト (任意のエンディアン) の場合:

int x = ((unsigned int)number >> (n << 3)) & 0xff;

もちろん、これらはすべてn<sizeof(int)であり、それnumberint.

于 2011-10-17T00:20:09.410 に答える
4

int nth = (number >> (n * 8)) & 0xFF;

それを最下位バイトに運び、「おなじみの」方法で受け取ります。

于 2011-10-16T21:25:21.430 に答える
1

バイトが必要な場合、より良い解決策は次のとおりではないでしょうか。

byte x = (byte)(number >> (8 * n));

このように、int ではなくバイトを返して処理するため、使用するメモリが少なくなり& 0xff、結果をバイトにマスクするためだけにバイナリと演算を実行する必要がなくなります。また、質問者が例で int を使用していることもわかりましたが、それでは正しくありません。

この質問がずっと前に出されたことは知っていますが、この問題に遭遇したばかりであり、これがより良い解決策であると思います.

于 2019-06-13T22:43:10.420 に答える