Dwu-bajtowe słowa

0

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?

1
  1. Jako co jest dostajesz? 2 bajty litttle endian?
  2. Co to jest "zwykły" int dla ciebie? int 32? int 64? little endian? big endian? signed? unsigned?
0
  1. Tak 2 little endian, najmniej znaczący pierwszy
  2. 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?

1

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;
}
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

0
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

0

Przepraszam za spam, nie mogę edytować ani usuwać postów...
Można zamknąć, problem rozwiązany, little endiany zrosły się w większego :) dziękuję za pomoc Sparrow-hawk

1 użytkowników online, w tym zalogowanych: 0, gości: 1