Aktywne Wpisy
orlen_lite +33
Pamiętamy o Bohaterach Powstania Warszawskiego. Bądźmy razem w godzinę „W”!
#powstaniewarszawskie #powstanie #warszawa #wojna
#powstaniewarszawskie #powstanie #warszawa #wojna
Szumny +215
Tak ogółem to ochajtałem się w piątek z @lunaria xD
#zwiazki #chwalesie #wykop #rozowepaski #logikaniebieskichpaskow
#zwiazki #chwalesie #wykop #rozowepaski #logikaniebieskichpaskow
Załóżmy, że jest zdefiniowana np. następująca struktura:
struct struktura {
uint16_t x;
uint8_t y;
uint8_t z;
}
I chciałbym pobrać np. 2 bajt z tej struktury, w tym przypadku była by to bardziej znacząca część zmiennej x. Jak to zrobić?
W tej chwili robiłem to w ten sposób, że kopiowałem strukturę do tablicy charów. Jednak chcę uniknąć tej operacji, ze względu na długi czas wykonywania (na mikrokontrolerze) i chcę mieć bezpośredni dostęp do kolejnych bajtów.
memcpy(buffor, (void *)&s, sizeof(struktura));
Jakieś pomysły? :)
struktura s;
char* ptr = (char * )&s
int16_t* ptr2 = (int16_t * )(ptr+2)
Komentarz usunięty przez autora
ale ja osobiście bałbym się castować całą strukturę i wyciągać pojedyncze bajty bojąc się, że kompilator może zrobić psikusa i celem jakiejś optymalizacji przestawi sobie kolejność zmiennych w strukturze, co innego castować samą składową x - tutaj wystarczy znać endianowość.
union asd
{
uint16_t x;
char xc[2];
}
i wtedy do części bajtów dostajesz się poprzez odwołanie do elementu tablicy. Czy jakoś tak.
http://ideone.com/dE7KPj
Komentarz usunięty przez autora
@wykoszonytrawnik: Lub mniej znacząca. Zależy od endianowości :-)
ptr+2
wskaże na trzeci (a nie drugi) bajt struktury. Secundo, jeżeli potraktujesz go wskaźnikiem naint16_t
, to wartość będzie zbudowana z dwóch bajtów, trzeciego i czwartego. Tertio, branie tych wartości ze znakiem nie ma najmniejszego sensu, szczególnie, że oryginały były unsigned. Wreszcie quarto, arytmetyka wskaźników trochę tu zaciemnia obraz.@wykoszonytrawnik: Ja zrobiłbym tak:
uint8_t * byte_array = (uint8_t *) &s
uint8_t
A czy ze znakiem czy bez to już kwestia co potem robi z tymi danymi.