2015-09-22 3 views
0

J'ai une valeur de 8 bits que je veux stocker dans une valeur 32 bits existante, en ne mettant à jour que les données sur 8 bits et en conservant les 24 autres bits comme avant.Masquer la valeur de 8 bits en valeur 32 bits

Par exemple, je pourrais vouloir stocker 0x01 (0x00000001) dans la valeur existante 0x01000100 et je veux que le résultat soit 0x01000101.

Ma première pensée était à OU dans 0xFFFFFF00 à la valeur de 8 bits que je veux stocker pour le rendre 0xFFFFFFXX. Ensuite, j'allais ET cela à la valeur 32 bits, mais je me suis rendu compte que cela ne fonctionnera pas si la valeur de 32 bits a 00 comme dernier octet et je veux stocker 01. Puis je pensais que je voudrais utiliser mon original 8 bits valeur et OU directement dans la valeur 32 bits, mais cela ne fonctionnera pas si le dernier octet dans la valeur de 32 bits est 01 et je veux stocker 00.

Je me rends compte que cela peut être un peu difficile à lire mais fondamentalement ce que je veux faire est de fusionner une valeur 32 bits de 0xXXXXXXXX et une valeur 8 bits de 0xYY (0x000000YY) pour devenir 0xXXXXXXYY

Répondre

4

Vous êtes assez proche: D'abord, mettez à zéro les octets les plus bas de votre cible 32- valeur de bit par ET avec 0xFFFFFF00, puis, OU dans votre valeur de huit bits.

+1

« puis, OU votre valeur de huit bits » soin particulier doivent être prises pour masquer les 3 premiers octets de huit bits par une opération ET avec 0x000000FF masque – redobot

+1

@redobot: Je supposais que seuls les huit bits inférieurs sont définis - mais en effet, il est plus sûr de faire comme vous et MikeCAT dire. –

4
x = 0xXXXXXXXX; 
y = 0x000000YY; 
ret = (x & 0xFFFFFF00) | (y & 0x000000FF);