Je sais que vous pouvez obtenir le premier octet en utilisant
int x = number & ((1<<8)-1);
ou
int x = number & 0xFF;
Mais je ne sais pas comment obtenir le nième octet d'un entier. Par exemple, 1234 est 00000000 00000000 00000100 11010010 comme entier 32 bits. Comment puis-je obtenir tous ces octets? le premier serait 210, le second serait 4 et les deux derniers seraient 0.
int x = (number >> (8*n)) & 0xff;
où n est 0 pour le premier octet, 1 pour le deuxième octet, etc.
Pour le (n + 1) ème octet dans l'ordre dans lequel ils apparaissent en mémoire (ce qui est également du moins au plus significatif sur les machines peu endiennes comme x86):
int x = ((unsigned char *)(&number))[n];
Pour le (n + 1) ème octet du moins au plus significatif sur les machines big-endian:
int x = ((unsigned char *)(&number))[sizeof(int) - 1 - n];
Pour le (n + 1) ème octet du plus petit au plus significatif (n'importe quel endien):
int x = ((unsigned int)number >> (n << 3)) & 0xff;
Bien sûr, tout cela suppose que n
<sizeof(int)
, et que number
est un int
.
int nth = (number >> (n * 8)) & 0xFF;
Portez-le dans l'octet le plus bas et prenez-le de la manière "familière".