Mam łańcuch znaków, który zawiera reprezentację tekstową liczby w formacie heksadecymalnym. Niech to będzie np. "51".
Z dokumentacji modułu, który raczy mnie tymi danymi, wiem, że jest to postać hex, czyli dziesiętnie 81. Chciałbym ten łańcuch znaków przekształcić na postać liczbową zawartą w zmiennej typu uint8_t, ale... No właśnie, jedno ale. Funkcja atoi konwertuje ASCII do postaci liczbowej, ale w takiej postaci, jaką ją zastanie. Co to oznacza? Ano tyle, że jeśli wykonam taką operację:
Kod: Zaznacz cały
char tekst[] = "51";
uint8_t zmienna = atoi(tekst);
printf("%d", zmienna);
To w oknie konsoli zobaczę wyświetloną liczbę 51, co jest wciąż reprezentacją heksadecymalną. Prawidłowa wartość powinna być 81.
Znalazłem też funkcję strtol, ale tu trzeba jawnie rzutować i wygląda to mniej więcej tak:
Kod: Zaznacz cały
char *context;
zmienna = (uint8_t) strtol(tekst, &context, 16);
No i pytanie: Sposób z rzutowaniem oraz funkcją strtol jest słuszny, czy jest coś prostszego i bardziej eleganckiego, co zamieniłoby 51 w postaci hex ascii na dec int?