Неверное преобразование String

Feofan
Offline
Зарегистрирован: 28.05.2017
Доброго времени.
String sres = "499602D2";
unsigned long tt[4];
int z = 0;
Serial.println("sres: " + sres);
for (int i = 0; i < (sres.length() / 2); i++) {
  tt[i] = long(sres.substring(z, z + 2).toInt());
  Serial.print(sres.substring(z, z + 2));
  Serial.print("->");
  Serial.println(tt[i]);
  z += 2;
}
Ожидаемый результат:
sres: 499602D2
49->49
96->96
02->2
D2->D2
 
Фактический результат:
sres: 499602D2
49->49
96->96
02->2
D2->0
 
Где я косячу?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А Вас не смущает, что "D" не является десятичной цифрой?

Feofan
Offline
Зарегистрирован: 28.05.2017

Уже смущает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

:)

Feofan
Offline
Зарегистрирован: 28.05.2017

Решение моей "проблемы":

String sres = "499602D2";
unsigned long tt;
tt = strtoul(sres.c_str(), NULL, 16);
Serial.print("sres: " + sres);
Serial.print("->");
Serial.print(tt);
===
sres: 499602D2->1234567890

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, решение, значит решение, никто ж не знает в чём Ваша проблема и что именно Вы делаете. 

Хочу только заметить, что в первом посте Вы пытались печатать полученную информацию побайтно, а сейчас - едины длинным числом. Если Вам всё равно, значит - решение.