traduccion tecla left desplazamiento bitwise c byte shift bit-shift

tecla - c obtener nth byte de entero



left shift tecla (3)

Sé que puedes obtener el primer byte usando

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

o

int x = number & 0xFF;

Pero no sé cómo obtener el enésimo byte de un entero. Por ejemplo, 1234 es 00000000 00000000 00000100 11010010 como un entero de 32 bits ¿Cómo puedo obtener todos esos bytes? el primero sería 210, el segundo sería 4 y los dos últimos serían 0.


Para el (n + 1) th byte en el orden en que aparecen en la memoria (que también es el menos significativo para las máquinas little-endian como x86):

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

Para el byte (n + 1) de menos a más significativo en máquinas big-endian:

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

Para el byte (n + 1) del menos al más significativo (cualquier endiano):

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

Por supuesto, todos asumen que n < sizeof(int) , y ese number es un int .


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

Llévelo al byte más bajo y tómelo de la manera "familiar".


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

donde n es 0 para el primer byte, 1 para el segundo byte, etc.