Skocz do zawartości

Połączenie liczb binarnych


Pomocna odpowiedź

Napisano (edytowany)

Witam, potrzebuje połączyc zmienne w jeden ciąg znaków binarnych a potem zamienić to na wartośc hex.

byte ZNAK_1 = 0x0C //001100 BINARNIE
byte ZNAK_2 = 0x0C //001100 BINARNIE
byte ZNAK_3 = 0x0C //001100 BINARNIE
byte ZNAK_4 = 0x0C //001100 BINARNIE
  
// CIAG ZNAKOW 001100001100001100001100     //PODZIELONY DLA WIDOCZNOSCI    001100 001100 001100 001100
// WARTOSC HEX OTWORZYMANA PO ZAMIANIE CIAGU NA HEX 30C30C
  

I właśnie nie wiem jak z tych zmienych zrobić ciąg znaków.

Screenshot_377.png

Edytowano przez radex324

Interesuje Ciebie cos takiego jak przesuniecia bitowe...tworzysz zmienna 4-bajtowa i przesuwasz bajty na odpowiednie miejsca i otrzymujesz to co chcesz...liczbe Hex mozesz wyswietlic w monitorze bez ceregieli...

  • Lubię! 1
1 minutę temu, radex324 napisał:

@ethanak Dlatego że potrzebuje zapis w 6 bitach a nie 8 tylko wtedy działa to co potrzebuje.

No to dodatkowo musisz "przycinac" kazdy bajt do 6 bitow...choc tez nie rozumiem dlaczego...

  • Pomogłeś! 1
(edytowany)
uint32_t liczba_32b =  ((uint32_t)bajt1 << 24) | ((uint32_t)bajt2 << 16) | (bajt3 << 8) | (bajt4);

cos takiego..

To moze powiedz do czego takiego zapisu potrzebujesz, bedzie prosciej doradzic

Edytowano przez farmaceuta
  • Pomogłeś! 1

Kodowanie znaków w liczniku pojazdu poprzez linie CAN, licznik obsługuje komendy składające się z 4 znaków(ASCI) gdzie każdy znak jest wartością 6 bitową i 4 znaki są zakodowane na 3 bitach np znaki "AAAA" to "30C30C"

@farmaceuta

uint32_t liczba_32b =   ((uint32_t)bajt1 << 18) | ((uint32_t)bajt2 << 12) | (bajt3 << 6) | (bajt4);

Zmodyfikowałem kod tak aby uciąć 00 na początku i kod już działa pokazuje się ciąg "1100001100001100001100" Dziekuje bardzo za rozwiązanie mojego problemu 😄 

  • Lubię! 1
(edytowany)

Mozna jeszcze do kazdego bajtu dopisac "obcinanie" bitow...chodzi o to ze jesli np. na drugim bajcie pojawilo by sie cos wiekszego niz 6bitow to w kodzie powyzej starsze bity wyladuja na mlodszych bitach bajtu pierwszego...i bedzie blad...

bajt1 &= 0x3F;
bajt2 &= 0x3F;
bajt3 &= 0x3F;
bajt4 &= 0x3F;

Cos takiego mozesz dopisac przed laczeniem tych bajtow i powinno byc ok...

Edytowano przez farmaceuta
  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...