web-dev-qa-db-fra.com

c obtenir le nième octet d'entier

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.

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

où n est 0 pour le premier octet, 1 pour le deuxième octet, etc.

69
Vaughn Cato

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.

13
Dmitri

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

Portez-le dans l'octet le plus bas et prenez-le de la manière "familière".

2
akappa