Tom92 napisał(a):
następnie odczytane liczby do separatorów ',' wpisywać kolejno do zmiennych a,b,c,d,e,f,g,h. Oczywiście musiałbym jeszcze dodać do tych zmiennych dodatkowo na początku prefiks 0x i na końcu przecinek.
Widzę, że chyba coś Ci się pomieszało. Nie musisz niczego dodawać. Mam wrażenie, że nie rozumiesz różnicy pomiędzy wartością liczbową a ciągiem znaków.
Dla uproszczenia tablica dwuelementowa:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ten zapis tworzy dwuelementową tablicę wartości. Kompilator utworzy zmienną poprzez zarezerwowanie w pamięci RAM dwóch bajtów i umieszczenie w nich przypisanych im wartości. Na podstawie prefiksu
0x zidentyfikuje format heksadecymalny i wartości obliczy poprzez:
0x28 =
2*16+
8 = 40 (00101000 binarnie)
0x86 =
8*16+
6 = 134 (10000110 binarnie)
Natomiast to, co Ty próbujesz zrobić, to chyba w efekcie coś w stylu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a to Ci się nie uda, ponieważ wyrażenie w cudzysłowie to tak naprawdę tablica znaków (kodów ASCII):
"0x28" to to samo co {'0', 'x', '2', '8', '\0'} lub {0x30, 0x78, 0x32, 0x38}
i tak traktuje to kompilator, a nie jako wartość 0x28.
Rozumiesz chyba, że nie da się wpisać całego ciągu do pojedynczej zmiennej jednobajtowej.
Dlatego też, kiedy już wydobędziesz sobie z komendy AT jakiś dwucyfrowy ciąg znaków (np. za pomocą funkcji
strtok() ) musisz użyć funkcji, która skonwertuje go na jednobajtową wartość.
Biorąc przykładowo ciąg znaków "4C", Twoja funkcja powinna:
- odczytać kod ASCII pierwszego znaku - tutaj będzie to 0x34 ('4')
- na podstawie tej wartości znaku ASCII obliczyć wartość pierwszej cyfry - tutaj będzie to 4
- odczytać kod ASCII drugiego znaku - tutaj będzie to 0x43 ('C')
- na podstawie tej wartości znaku ASCII obliczyć wartość drugiej cyfry - tutaj będzie to 12
- obliczyć wartość na podstawie wzoru
wynik = (wartość pierwszej cyfry)*16+(wartość drugiej cyfry)
czyli w naszym wypadku 4*16+12=76 - zwrócić wynik
I tak po kolei wszystkie dwucyfrowe ciągi znaków, przetworzyć na wartości jednobajtowe i przypisać do odpowiednich elementów Twojej tablicy
adres1[].
Można byłoby też ewentualnie użyć do konwersji funkcji
strtoul() z biblioteki standardowej, ale to trochę przerost formy nad treścią.