Konwersja uint16_t => uint8_t => uint16_t

Konwersja uint16_t => uint8_t => uint16_t
VC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Mam zmienną dwubajtową:

Kopiuj
uint16_t A=0x265;

następnie rozbijam ją na dwie zmienne ośmiobitowe:

Kopiuj
uint8_t A1=0x26;
uint8_t A2=0x05;

Następnie znów potrzebuję połączyć dwie zmienne A1 i A2 żeby wrócić do zmiennej uint16_t;
Robię tak:

Kopiuj
uint16_t C = (A1 << 8) | A2

Wynik dostaję taki: 0x2605;
a spodziewałem się: 0x265

Jak to poprawnie przekonwertować?

AN
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
uint16_t C = ((uint16_t)A1 << 8) | (uint16_t)A2;
VC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0
andrzejlisek napisał(a):
Kopiuj
uint16_t C = ((uint16_t)A1 << 8) | (uint16_t)A2;

To niczego nie zmieniło.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
6

Ale granica bajta w zapisie: 0x265 nie jest 26 5, ale 2 65
https://godbolt.org/z/e8aM71xfM

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
5

a spodziewałem się: 0x265

Jakim cudem miałoby tu wyjść 0x265?

Cały problem nie leży w tym, że ten kod uint16_t C = (A1 << 8) | A2 jest niepoprawny, bo jest poprawny.

Cały problem leży w tym, że nie umiesz 0x265 rozbić na dwa bajty. Pozwól, że Ci pomogę zmieniając trochę zapis: 0x0265.

H4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0
Kopiuj
uint16_t A = 0x265;
uint8_t A1 = (A >> 8) & 0xFF; 
uint8_t A2 = A & 0xFF;

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.