Подтвердить что ты не робот

C получить n-й байт целого числа

Я знаю, что вы можете получить первый байт, используя

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

или

int x = number & 0xFF;

Но я не знаю, как получить n-й байт целого числа. Например, 1234 является 00000000 00000000 00000100 11010010 как 32-битное целое число Как я могу получить все эти байты? первый будет 210, второй - 4, а последние два - 0.

4b9b3361

Ответ 1

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

где n равно 0 для первого байта, 1 для второго байта и т.д.

Ответ 2

Для (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), а number - int.

Ответ 3

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

Переведите его в младший байт и возьмите его "знакомым" способом.

Ответ 4

Если вы хотите получить байт, лучшим решением будет:

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

Таким образом, вы возвращаете и работаете с байтом вместо int, поэтому мы используем меньше памяти, и нам не нужно делать двоичный файл и операцию & 0xff только для того, чтобы замаскировать результат до байта. Я также видел, что человек, задающий вопрос, использовал int в своем примере, но это не делает это правильно.

Я знаю, что этот вопрос задавался очень давно, но я столкнулся с этой проблемой, и я думаю, что это лучшее решение, несмотря на это.