2013-06-11 17 views
5

Pobieram dane z bajtów pliku .txt przez bajt przy użyciu delphi. Dla każdego bajtu muszę zamienić początkowy i końcowy bit tego bajtu. Szukałem google od wielu godzin, ale nie mogę znaleźć odniesienia do manipulowania bitami wewnątrz bajtów vars w delphi. Jakieś pomysły?Manipulowanie bitami bajtów vars w Delphi

+0

Najszybszym sposobem jest użycie tabeli odnośników –

Odpowiedz

10
b := (b and $7E) or (b shr 7) or (b shl 7); 

Najpierw zachowujemy środkowe 6 bitów, a następnie zamieniamy bity MSB i LSB w operacjach zmiany rejestru.

Obsługa bitów w Delphi to dobra zabawa. Istnieje wiele opcji i jest to proste rozwiązanie. David proponuje rozwiązanie LUT, które może być szybsze (tylko odrobinę).

Było interesujące podobne pytanie o odbijaniu bitów całego bajtu, zobacz How can I bit-reflect a byte in Delphi?.

+0

To jest * rozwiązanie *. Pierwszym operandem jest b bez jego MSB i LSB, drugi operand jest początkowym MSB (teraz w pozycji LSB), podczas gdy trzeci operand jest początkowym LSB (teraz w pozycji MSB). Oczywiście wynikiem 'lub'ed jest' b' z zamianą MSB-LSB. –

+0

Ponadto, jeśli chcesz przejść do tabeli sprawdzającej, możesz użyć jednego liniowca powyżej, aby wygenerować ten stół! –

+0

Doskonała odpowiedź od LU RD! Dzięki za wyjaśnienie Andreas! – HHH