Disons que j’ai le tableau de caractères suivant
char array[32];
Je souhaite utiliser uniquement les 10 bits les plus significatifs de ce tableau en tant que valeur de hachage.
Est-il possible d’utiliser l’opération bit à bit sur ce tableau de caractères?
Si oui, comment devrais-je le faire?
En supposant que votre implémentation ait un caractère de 8 bits et que vous avez un nombre de 256 bits stocké dans big endian dans ce tableau, voici comment accéder aux 10 msb du nombre de 256 bits.
uint16_t a; a = (array[0] << 2 | (array[1] & 0xC0) >> 6) & 0x3FF;
Je suis sûr que vous voulez quelque chose comme ceci (en supposant que les caractères 8 bits char
stockés dans un grand endian dans un array
):
uint16_t a = (((uint16_t)array[0] & 0xFF) << 2 | ((uint16_t)array[1] & 0xFF) >> 6) & 0x3FF;
Pour décomposer cela un peu:
uint16_t byte0 = (uint16_t)array[0] & 0xFF; uint16_t byte1 = (uint16_t)array[1] & 0xFF; uint16_t a = (byte0 << 2 | byte1 >> 6) & 0x3FF;