Witam,
Mam pytanie dotyczące programowania w C. Nie umiem za bardzo w nim programować i stąd moja prośba:
Potrzebny mi jest krótki fragment kodu w C, który przekształci 3 bajty danych w 2 bajty wg zasady: najstarsze 3 bity pierwszego bajtu łączy z najstarszymi 3 bitami drugiego bajtu oraz 3 bajtu. Najlepiej to przedstawi schemat:
1 bajt a7a6a5a4a3a2a1a0
2 bajt b7b6b5b4b3b2b1b0
3 bajt c7c6c5c4c3c2c1c0
przekształci w 2 bajty:
1 bajt c1c0b2b1b0a2a1a0
2 bajt xxxxxxxxxxxxxxc2
x - zera
Myślę, że to nie jest trudne, a ja nie znam sie na operacjach na bitach w C.
Dzieki za pomoc.
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięOperacje na bitach w C
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
ale namieszales z tym 1 bajt, 2 bajt... *) i jak mam Ci teraz odpowiedzeic ?? (zeby to bylo logiczne).
Przyjmijmy ze Bz1, Bz2, Bz3 to bajty zrodlowe (te z ktorych chcesz obliczac). Zas BL i BH to bajty wyniku.
dlaczego 0x07 ?? bo to 00000111.
*) No chyba ze chciales nadpisac bajt1 wynikiem... wowczas smialo mozesz zamienic BL na Bz1 ...
Przyjmijmy ze Bz1, Bz2, Bz3 to bajty zrodlowe (te z ktorych chcesz obliczac). Zas BL i BH to bajty wyniku.
Kod: Zaznacz cały
BL = (Bz1 & 0x07) + ((Bz2 & 0x07) << 3) + (Bz3 << 6);
BH = (Bz3 & 0x04) >> 2;
*) No chyba ze chciales nadpisac bajt1 wynikiem... wowczas smialo mozesz zamienic BL na Bz1 ...
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości