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.