[RISOLTO] Operazioni su stringa - problemi se inizia con carattere &

Ciao a tutti, nello sketch che sto realizzando ho questa porzione di codice che pur riguardandola e facendo un po di debug con vari serial.print non “vedo” l’errore.

//Serial.println(readString);
            //GET /save.php?ip=255.255.255.255&dn=255.255.255.255&gw=255.255.255.255&sb=255.255.255.255&tcp=80 HTTP
            readString.remove(0, 14);
            //ip=255.255.255.255&dn=255.255.255.255&gw=255.255.255.255&sb=255.255.255.255&tcp=80 HTTP
            readString.replace(' ', '&');
            Serial.println(readString);
            //ip=255.255.255.255&dn=255.255.255.255&gw=255.255.255.255&sb=255.255.255.255&tcp=80&HTTP
            for (byte i = 0; i <= 3; i++) {
              String tempip = readString;
              byte startip = tempip.indexOf('=') + 1;
              byte endip = tempip.indexOf('&');
              readString.remove(0, endip);
              Serial.println(endip);
              Serial.println(readString);
              //&dn=255.255.255.255&gw=255.255.255.255&sb=255.255.255.255&tcp=80&HTTP
              //&gw=255.255.255.255&sb=255.255.255.255&tcp=80&HTTP
              //ecc...
              tempip.remove(endip);
              tempip.remove(0, startip);
              //255.255.255.255
              for (byte ioctet = 0; ioctet <= 3; ioctet++) {
                String tempoctet = tempip;
                byte endoctet = tempoctet.indexOf('.');
                tempip.remove(0, (endoctet + 1));
                //255.255.255
                //255.255
                //ecc...
                tempoctet.remove(endoctet);
                //255
                byte octet = tempoctet.toInt();
                //da fare il salvataggio su eprom dei valori
                if (i == 0) Serial.print("ip(");
                else if (i == 1) Serial.print("dns(");
                else if (i == 2) Serial.print("gateway(");
                else if (i == 3) Serial.print("dns(");
                Serial.print(ioctet);
                Serial.print("): ");
                Serial.println(octet);
              }
            }
            //&tcp=80&HTTP
            //Serial.println(readString);
            byte starttcp = readString.indexOf('=') + 1;
            byte endtcp = readString.indexOf('&');
            readString.remove(endtcp);
            readString.remove(0, starttcp);
            unsigned int tcp = readString.toInt();
            Serial.println("Porta TCP: ");
            Serial.print(tcp);

nel primo ciclo for estraggo dalla stringa principale la stringa contenente solo gli IP e subito dopo averlo fatto, il secondo ciclo for, scompone l’ip nei 4 ottetti.al termine del primo ciclo tutto ok, ma dal secondo ciclo in poi la stringa originale non viene più modificata/letta.
ecco cosa ottengo su seriale:

ip=192.168.1.10&dn=192.168.1.1&gw=192.168.1.1&sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
15
&dn=192.168.1.1&gw=192.168.1.1&sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
ip(0): 192
ip(1): 168
ip(2): 1
ip(3): 10
0
&dn=192.168.1.1&gw=192.168.1.1&sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
dns(0): 0
dns(1): 0
dns(2): 0
dns(3): 0
0
&dn=192.168.1.1&gw=192.168.1.1&sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
gateway(0): 0
gateway(1): 0
gateway(2): 0
gateway(3): 0
0
&dn=192.168.1.1&gw=192.168.1.1&sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
dns(0): 0
dns(1): 0
dns(2): 0
dns(3): 0
Porta TCP: 
0

Anche fuori dai cicli FOR quando dovrebbe rimanere di leggere solo la porta TCP, a quel punto la stringa iniziale subisce la stessa operazione che le viene fatta nel primo ciclo for, ma anche qui non viene eseguito nulla e restituisce 0…
può essere un errore generato dal carattere & con cui inizia la stringa ?

Al mio occhio è l’unica cosa che cambia dal primo ciclo for dove la stringa inizia con ip=xxx.xxx.xxx.xxx&… mentre al secondo ciclo, avendo preso e tolto l’ip, la stringa rimane con all’inizio &dn=… e non viene piu fattà nessuna operazione sulla stringa stessa…

Ho appena auto-verificato e modificato il codice:

...
for (byte i = 0; i <= 3; i++) {
              String tempip = readString;
              byte startip = tempip.indexOf('=') + 1;
              byte endip = tempip.indexOf('&');
              readString.remove(0, endip);
...

in

...
for (byte i = 0; i <= 3; i++) {
              String tempip = readString;
              byte startip = tempip.indexOf('=') + 1;
              byte endip = tempip.indexOf('&');
              readString.remove(0, (endip + 1));
...

così da togliere ad ogni ciclo del loop anche la & dall’inizio della stringa.
Problema sparito.
Adesso l’output sulla seriale è:

ip=192.168.1.10&dn=192.168.1.1&gw=192.168.1.1&sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
15
dn=192.168.1.1&gw=192.168.1.1&sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
ip(0): 192
ip(1): 168
ip(2): 1
ip(3): 10
14
gw=192.168.1.1&sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
dns(0): 192
dns(1): 168
dns(2): 1
dns(3): 1
14
sb=255.255.255.0&tcp=80&HTTP/1.1
Accept
gateway(0): 192
gateway(1): 168
gateway(2): 1
gateway(3): 1
16
tcp=80&HTTP/1.1
Accept
dns(0): 255
dns(1): 255
dns(2): 255
dns(3): 0
Porta TCP: 
80

Non so se già qualcuno si era imbattuto in questo tipo di problema con le stringhe e & come inizio stringa, ma può dipendere da qualche libreria nella IDE di Arduino?

mi autorispondo nuovamente… per capire ho scritto e provato questo sketch:

String readString = "&ciaocomeva";

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (readString.indexOf("ciao") > 0) Serial.print("Funziona");
  else Serial.print("Non funziona");
  while (1);
}

e questo mi genera l’output corretto dicendomi “Funziona” !!!
eppure la stringa parte con la &…

Qualcuno riesce a spiegarmi il perché adesso funziona e prima no ?