Arduino Polska Forum
Jak zmienić tablicę na liczbę całkowita?? - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Jak zmienić tablicę na liczbę całkowita?? (/watek-jak-zmieni%C4%87-tablic%C4%99-na-liczb%C4%99-ca%C5%82kowita)

Strony: 1 2 3


Jak zmienić tablicę na liczbę całkowita?? - Jarewa0606 - 04-03-2019

dam przykład mam tablicę 
x[] = (1,2,3,4);

i liczbę całkowitą
int y;

 teraz jak zapisać

x[0] = 1;
x[1] = 2;
x[2] = 3;
x[3] = 4;

do postaci liczby 

y= 1234


RE: Jak zmienić tablicę na liczbę całkowita?? - kaczakat - 05-03-2019

y=x[0]*1000+x[1] x100+ ...itd.


RE: Jak zmienić tablicę na liczbę całkowita?? - Jarewa0606 - 05-03-2019

Zapomniałem napisać ale chyba to ważne że tablice mam w char. Jaka tablice dać? Bo w char krzaki wychodza?


RE: Jak zmienić tablicę na liczbę całkowita?? - kaczakat - 05-03-2019

Char to też liczba 0-255, można to wykorzystać, że określone cyfry to określona liczba i odjąć stałą przesunięcia w tablicy char bo znaki drukowalne są przesunięte o kilkadziesiąt. Są też do tego gotowe funkcje, w C konwertujesz itoa (int to asccii), atoi w druga stronę, w C i w Arduino możesz skleić napis w String i cały przekonwertować funkcją https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/toint/. Do każdego typu liczb są inne funkcje, więc jak masz jakieś przecinki to musisz wiedzieć.




Kod:
String myString="";
myString= x[0] +x[1]  + ...itd.;

int zmiennaliczbowa=myString.toInt();

Jaką liczbą jest znak możesz sprawdzić oczami Serial.println((uint8_t) (x[0]));
Metod jest wiele, warto sprawdzać przy łączeniu czy znak jest cyfrą.


RE: Jak zmienić tablicę na liczbę całkowita?? - Jarewa0606 - 05-03-2019

No właśnie to liczba co chce zmienić  przechwytuje pakiet UDP  AC1234\n rozbijam to do tablicy char

ubuffer [0]
ubuffer [1] itd.. wyluczam litery AC i koniec \n 

i zrobiłem tak jak wyżej 

int zmienna =ubufffer[2]*1000+ubuffer[3] x100+ ...itd do [5]

Co widać że po przechwyceniu w tablicy mam AC1234\n

A po obliczeniu zmienna 54562


Zobaczę wieczorem ze stringiem choć to było łatwiejszeWink


RE: Jak zmienić tablicę na liczbę całkowita?? - Robson Kerman - 05-03-2019

Kaczakat dobrze pisze, tylko że nie istnieje coś takiego jak konkatenacja zmiennych char.
Trzeba je od razu konwertować do String.
Kod:
myString = String(x[0]) + String(x[1]) + ...itd.;

A potem dopiero można zrobić z tego inta:
myString.toInt()


RE: Jak zmienić tablicę na liczbę całkowita?? - kaczakat - 05-03-2019

Przyznaję, że w poprzednim poście pomieszałem trochę C i Arduino, konwertować literek w ogóle nie trzeba, bo tablica char (i powinna być zapisana np. jak poniżej, by było wiadomo, że to literki) jest C stringiem i całą można zamienić na stringa Arduino. Ale można ją też w całości przekonwertować na liczbę, jeśli jest już sprawdzona:
Kod:
char tabchar[]={'1','2','3','4'};


void setup() {
 // put your setup code here, to run once:
int liczba = atoi(tabchar);
Serial.begin(115200);
Serial.print("jako napis ");
Serial.println(tabchar);
Serial.print("Jako liczba ");
Serial.println(liczba/2);

Serial.print ("Jako string ");
String napis=String(tabchar);
Serial.println(napis);
liczba=napis.toInt();
Serial.print("Jako liczba ze stringa ");
Serial.println(liczba/4);


}

void loop() {
 // put your main code here, to run repeatedly:

}



RE: Jak zmienić tablicę na liczbę całkowita?? - Jarewa0606 - 06-03-2019

Dzięki chłopaki za pomoc działa pierwszy sposób znalazłem u siebie błąd głupi błąd bo ja pakiet udp telefonem wysyłałem i wysyłałem w HEX ale liczby 1,2,3 jako 0x31 0x32 itd.. Dopiero przy stringach mi wyszło że liczba wysłana to w udp hex bedzie 0x01 0x02 itd.. Ja początkujący raczkujący.


Wiec y=x[0]*1000+x[1] x100+ ...itd. jest OK Smile

Robię komunikacje ESP8266 - ESP32 gdzie ESP8266 obsługuje dwa wyświetlacze a ESP32 czujniki i dane z czujników przesyłam przez UDP , UDP rozdzielam przechwytuje które dane są dla danego wyświetlacza.


RE: Jak zmienić tablicę na liczbę całkowita?? - Jarewa0606 - 08-03-2019

(06-03-2019, 00:17)Jarewa0606 napisał(a): Dzięki chłopaki za pomoc działa pierwszy sposób znalazłem u siebie błąd


Wiec y=x[0]*1000+x[1] x100+ ...itd. jest OK Smile

Robię komunikacje ESP8266 - ESP32 gdzie ESP8266 obsługuje dwa wyświetlacze  a ESP32 czujniki i dane z czujników przesyłam przez UDP , UDP rozdzielam przechwytuje które dane są dla danego wyświetlacza.



RE: Jak zmienić tablicę na liczbę całkowita?? - Jarewa0606 - 08-03-2019

Jednak powrócę do tematu. 

Zrobiłem to na stringach i uklepałem takie coś:

Kod:
if (startMarker_AC == rc_){      // sprawdzanie czy pierwszy bajt to 0x41 dla AC
             rc_ = udp.read();
             if (udp.available() >= 6){
               data_AC_uBuffer[0] = rc_;
               for (i_ = 1; i_ < 7; i_ ++){   // rozbijanie ciagu znaków na bufory
                  data_AC_uBuffer[i_] = udp.read();
               }
               if (endMarker_AC == data_AC_uBuffer[6]){
                  data_AC_Buffer[0]= data_AC_uBuffer[2];
                  data_AC_Buffer[1]= data_AC_uBuffer[3];
                  data_AC_Buffer[2]= data_AC_uBuffer[4];
                  data_AC_Buffer[3]= data_AC_uBuffer[5];
                  String dane_UDP_data_AC = String (data_AC_Buffer);
                  strona_AC = dane_UDP_data_AC.toInt();
                  AC_data_send = true;
                 
               }else{
                 data_AC_uBuffer[i_] = 0x00;
               }
             
             }
         }
 I ESP32 wywala mi błędem jak to zrobić??
W pakiecie jest "AC1234\n wiec tablicą wyciągałem samą liczbę bo jednak dobra funkcja jak liczba jest ujemna... Działa to ale niestety po kilkunastu sekundach wywala błedem i resetem ESP32