La solution la plus élégante et flexible est, comme d'autres l'ont dit, pour appliquer un masque « en peigne » à la fois les bits pairs et impairs séparément, puis, après les avoir décalés à gauche et à droite respectivement un endroit pour les combiner en utilisant bit ou.
Une autre solution à laquelle vous souhaiterez peut-être tirer avantage de la taille relativement petite de votre type de données.Vous pouvez créer une table de 256 valeurs statiquement initialisées aux valeurs que vous souhaitez en sortie à votre entrée:
const unsigned char lookup[] = { 0x02, 0x01, 0x03, 0x08, 0x0A, 0x09, 0x0B ...
Chaque valeur est placée dans le tableau pour représenter la transformation de l'indice. Donc, si vous faites ceci:
unsigned char out = lookup[ 0xAA ];
out
contiendra 0x55
Ceci est plus lourd et moins souple que la première approche (si vous voulez passer de 8 bits à 16?) Mais ne dispose l'approche qu'il sera sensiblement plus rapide si l'exécution d'un grand nombre de ces opérations.
Quelle est la question? – JamesM
Désolé pour la première réponse que j'ai donnée si cela vous a dérouté. Je lis complètement votre erreur avant/après. – colithium
@JamesM: Désolé, si ce n'est pas évident, mais la question est: Dans un octet, jumeler les bits pour, par exemple, si l'octet est 10101100 puis l'appariement des bits ressemblera - '10 - 10 - 11 - 00'. Maintenant, si nous échangeons les paires individuelles, cela deviendra - '01 - 01 - 11 - 00'. J'avais besoin du mécanisme pour implémenter l'échange – RaviPathak