#arduino #programowanie Potrzebuję pomocy w rozwiązaniu małego problemu z operacjami na liczbach w c++ Mam liczbę z zakresu od zera do 0xFFFFFF, przyjmijmy że będzie to 0x112233 dla ułatwienia, muszę ją rozbić na segmenty 11, 22 ,33 , (zapis do pamięci gdzie zakres jest 0-255). Jak to rozwiązać?
Po tym będę musiał to odczytać i przekształcić , poprawcie mnie jeśli się mylę, dla 0x112233 będzie to (11x10000)+(22x100)+33. (x to mnożenie , gwiazdka nie wyświetla się w poście)
Od razu odpowiem dlaczego to wszystko : biblioteka na podstawie wartości HEX ustala wartości RGB dla takowej diody - 0xRRGGBB. Ta forma była dla mnie najwygodniejsza przy pisaniu kodu, jednak w trakcie wyszło, że przyda mi się zapis do pamięci EEPROM , tak by wartości były odtworzone po restarcie arduino (pamięć wcześniej ustawionego koloru), nie chciał bym zmieniać sposobów zapisu RGB teraz, gdy sporo rzeczy jest usystematyzowane właśnie pod HEX
@zawa44: Operator and i przesunięcie bitowe stykną by wydobyć dowolny segment pierwszy segment: ( liczba & 0xFF0000 ) >> 16 drugi segment: ( liczba & 0x00FF00 ) >> 8 trzeci segment: ( liczba & 0x0000FF )
@zawa44: Dzielisz to tylko żeby zapisać do eeprom, czy dalej obrabiasz? eeprom.put/.get powinny zapisać/odczytać long w całości, bez potrzeby dzielenia (tyle że 4 bajty a nie 3).
@Portier-Harry_Portier: Nie obrabiam jedynie zapis/odczyt , faktycznie to będzie lepsza opcja niż przetwarzanie liczb, nie wiedziałem o takiej możliwości. Wiesz może czy adresy zapisu będą szeregowane tak jak przy EEPROM.write czy to się komplikuje jakoś? EEPROM.update działa czy będzie trzeba sprawdzić wartość z poprzednią i w takim wypadku zapisywać przez put ?
Eh przegapiłem info, że znowu była podwyżka minimalnej. I znowu zarabiam tylko 500zł więcej od sprzątaczki. 10 lat nabijania doświadczenia, 10 lat pracy jako grafik z czego 6 lat wypruwania sobie żył w agencji reklamowej i wszystko c---a warte.
Potrzebuję pomocy w rozwiązaniu małego problemu z operacjami na liczbach w c++
Mam liczbę z zakresu od zera do 0xFFFFFF,
przyjmijmy że będzie to 0x112233 dla ułatwienia,
muszę ją rozbić na segmenty 11, 22 ,33 , (zapis do pamięci gdzie zakres jest 0-255).
Jak to rozwiązać?
Po tym będę musiał to odczytać i przekształcić , poprawcie mnie jeśli się mylę, dla 0x112233 będzie to (11x10000)+(22x100)+33. (x to mnożenie , gwiazdka nie wyświetla się w poście)
Od razu odpowiem dlaczego to wszystko : biblioteka na podstawie wartości HEX ustala wartości RGB dla takowej diody - 0xRRGGBB. Ta forma była dla mnie najwygodniejsza przy pisaniu kodu, jednak w trakcie wyszło, że przyda mi się zapis do pamięci EEPROM , tak by wartości były odtworzone po restarcie arduino (pamięć wcześniej ustawionego koloru), nie chciał bym zmieniać sposobów zapisu RGB teraz, gdy sporo rzeczy jest usystematyzowane właśnie pod HEX
Pokombinuj z resztą z dzielenia i odejmowaniem, dodawaniem itd.
Ew. (brzydko) -> cast na str i split co 2 znaki (ble)
andi przesunięcie bitowe stykną by wydobyć dowolny segmentpierwszy segment: ( liczba & 0xFF0000 ) >> 16
drugi segment: ( liczba & 0x00FF00 ) >> 8
trzeci segment: ( liczba & 0x0000FF )
((int) pierwszy segment << 16) | ((int) drugi segment << 8 ) | ((int) trzeci segment)
@Portier-Harry_Portier:
Typ
eeprom.put/.get powinny zapisać/odczytać long w całości, bez potrzeby dzielenia (tyle że 4 bajty a nie 3).
Adresy? to jest jedna zmienna i jeden adres