2010-02-11 5 views
14

Je cherche un algorithme efficace en C pour transposer bit à bit 8 octets de données. Ce que je veux dire avec ceci est que si j'ai 8 octets comme ceci:Transposition bit à bit de 8 octets

00011100 
00111000 
00000001 
00000000 
11000000 
00000000 
11111111 
01010101 

Je veux obtenir les 8 octets suivants:

00001010 
00001011 
01000010 
11000011 
11000010 
10000011 
00000010 
00100011 

Et comme je veux l'utiliser sur une plate-forme intégrée, il devrait être aussi rapide que possible :-)

Toutes les idées sont très appréciées!

+2

Qu'est-ce que cela signifie? Je ne vois pas la relation entre l'entrée et la sortie désirée. Voulez-vous utiliser une table de recherche simple (256 octets)? –

+5

@Richard: C'est une transposition matricielle; rangée deviennent des colonnes et vice versa. Si vous lisez la colonne la plus à gauche du résultat, elle est égale à la première ligne de l'entrée. Comme il y a 64 bits d'entrée indépendants, une table de consultation devient ... grande. – unwind

+0

Les colonnes obtiennent des lignes et vice versa. – tur1ng

Répondre

18

Voir Hacker's Delight, chapitre 7-3.

+0

Merci. Ceci est exactement ce que je cherchais! –

+0

@Arnaud, c'est vraiment cool ... mais qu'est-ce qu'une application qui nécessiterait cette fonction? – vicatcu

+0

@vicatcu Ceci est utile si vous avez besoin de sortir 8 flux de données série sur un port d'E/S large d'un octet, par exemple. – jms