2010-02-11 7 views
14

Poszukuję wydajnego algorytmu w C, aby przetransferować bitowo 8 bajtów danych. Co mam na myśli to, że jeśli mam 8 bajtów tak:Bitowa transpozycja 8 bajtów

00011100 
00111000 
00000001 
00000000 
11000000 
00000000 
11111111 
01010101 

Chcę uzyskać następujące 8 bajtów:

00001010 
00001011 
01000010 
11000011 
11000010 
10000011 
00000010 
00100011 

A ponieważ chcę użyć to w osadzonym platformy, powinno być tak szybko jak to możliwe :-)

Wszystkie pomysły są doceniane!

+2

Co to oznacza? Nie widzę zależności między wejściem a pożądanym wyjściem. Czy chcesz użyć prostej (256 bajtowej) tablicy odnośników? –

+5

@Richard: To transpozycja macierzy; wiersz staje się kolumnami i odwrotnie. Jeśli przeczytasz kolumnę po lewej stronie wyniku, będzie ona równa pierwszemu wierszowi danych wejściowych. Ponieważ istnieje 64 niezależne bity wejściowe, tabela przeglądowa staje się ... duża. – unwind

+0

Kolumny uzyskują wiersze i odwrotnie. – tur1ng

Odpowiedz

18

Patrz Hacker's Delight, Rozdział 7-3.

+0

Dzięki. Właśnie tego szukałem! –

+0

@Arnaud, to naprawdę fajne ... ale co to jest aplikacja, która wymagałaby tej funkcji? – vicatcu

+0

@vicatcu Jest to użyteczne, jeśli chcesz np. Wyprowadzić 8 szeregowych strumieni danych na jednym bajcie szerokopasmowym porcie I/O. – jms

Powiązane problemy