Witam mam problem z 2bajtowymi słowami.
Otrzymuję z czujnika 14 bajtowych słów, każde są parą (przykład bajt 6 i 7 dają współrzędną x w przestrzeni) 0x00 0x23 na przykład
Zapisuję je do tablicy "uint16_t inBuff[14];"
Moje pytanie brzmi jak mogę je połączyć i zamienić na zwykłego inta?

- Rejestracja:około 21 lat
- Ostatnio:około 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
- Jako co jest dostajesz? 2 bajty litttle endian?
- Co to jest "zwykły" int dla ciebie? int 32? int 64? little endian? big endian? signed? unsigned?
- Tak 2 little endian, najmniej znaczący pierwszy
- unsigned, żebym mógł wykorzystać tę współrzędną później w if'ach
to wygląda tak, dostaję 14 bajtów z czego tylko 6 jest mi potrzebnych (4,5 numer obiektu)(6,7 pozycja X)(8,9 pozycja Y)
Powinienem również chyba zmienić deklarację bufora inBuff na uint8_t zamiast 16?

- Rejestracja:prawie 13 lat
- Ostatnio:4 miesiące
- Lokalizacja:Katowice
- Postów:189
Tak, bufor może być uint8_t
Najprostsza zamiana:
uint16_t v = buffor[i + 1] << 8 | buffor[i];
Można jeszcze pokusić się o takie rozwiązanie (Mało przenośne, zakłada, że kod uruchomiony będzie na platformie LE):
#include <iostream>
#include <cstdint>
using namespace std;
uint8_t Buffer[4] = {0xAA, 0x55, 0xBB, 0x66};
int main() {
uint16_t *ptr = (uint16_t*)Buffer;
for (size_t i = 0; i < 2; ++i)
std::cout << std::hex << ptr[i] << std::endl;
return 0;
}
Po krótkim testowaniu doszedłem to takiego rozwiązania
uint16_t buffor1 = 0xaa55;
inti1=buffor1<<0;
printf("%i \n",i1);
w takim przypadku dostaję faktyczną wartość 43 605
teraz nie wiem, jak połączyć
uint8_t buffor[0]=0x55;
uint8_t buffor[1]=0xaa;
aby powstało pełne 16-bitowe słowo które już będzie można odpowiednio zmienić na int
Dawid9p napisał(a):
Po krótkim testowaniu doszedłem to takiego rozwiązania
uint16_t buffor1 = 0xaa55; inti1=buffor1<<0; printf("%i \n",i1);
czyli po prostu nie muszę nic przesuwać binarnie... na szczęście :P
w takim przypadku dostaję faktyczną wartość 43 605
teraz nie wiem, jak połączyć
uint8_t buffor[0]=0x55;
uint8_t buffor[1]=0xaa;
aby powstało pełne 16-bitowe słowo uint16_t 0xaa55
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.