2010-05-31 7 views
1

J'ai un nombre hexadécimal à 8 chiffres dont j'ai besoin que certains chiffres soient 0 ou f. Compte tenu de l'emplacement spécifique des chiffres, il existe un moyen rapide de générer le nombre hexadécimal avec ces endroits "retournés" à f. Par exemple:Bit Inverser en hexadécimal

flip_digits(1) = 0x000000f 
flip_digits(1,2,4) = 0x0000f0ff 
flip_digits(1,7,8) = 0xff00000f 

Je fais cela sur un appareil embarqué donc je ne peux pas appeler les bibliothèques mathématiques, je soupçonne que cela peut être fait avec juste des changements peu, mais je ne peux pas comprendre tout à fait la méthode. Toute sorte de solution (Python, C, Pseudocode) fonctionnera. Merci d'avance.

Répondre

4
result = 0 
for i in inputs: 
    result |= 0xf << ((i - 1) << 2) 
4

Vous pouvez définir huit variables nommées, chacune avec un demi-octet donné tous les bits sont sur:

unsigned n0 = 0x0000000f; 
unsigned n1 = 0x000000f0; 
unsigned n2 = 0x00000f00; 
unsigned n3 = 0x0000f000; 
unsigned n4 = 0x000f0000; 
unsigned n5 = 0x00f00000; 
unsigned n6 = 0x0f000000; 
unsigned n7 = 0xf0000000; 

Ensuite, vous pouvez utiliser l'opérateur de bits ou de les combiner:

unsigned nibble_0 = n0; 
unsigned nibbles_013 = n0 | n1 | n3; 
unsigned nibbles_067 = n0 | n6 | n7; 

Si vous voulez pour les combiner au moment de l'exécution, il serait probablement plus simple de stocker les constantes dans un tableau afin de pouvoir y accéder plus facilement (par exemple, n[0] | n[6] | n[7]).