web-dev-qa-db-ja.com

c整数のn番目のバイトを取得

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

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

または

int x = number & 0xFF;

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

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

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

69
Vaughn Cato

メモリに現れる任意の順序で(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であると仮定しています。

13
Dmitri

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

それを最下位バイトに入れて、「なじみのある」方法でそれを取ります。

2
akappa