Массивы строки строки массивы

smcrim
Offline
Зарегистрирован: 14.11.2014

В общем вот:

String inData;
char charArray[100];
String part1;

inData = client.readString();
inData.toCharArray(charArray,100);
part1 = strtok(charArray,'=');                //Вот как здесь преобразовать в строку массив чаров

Приходящая строка имееет вид "string =int:int:int".

Буду очень признателен за любую помощь.

PS Поиск на сайте ужасен, так что возможно гдето такая тема уже есть но я найти не смог (

 

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Непонятно зачем вы используете String совместно с char. Вы уж определитесь. Или вы работаете с классом String как в Java или с указателями как в C++ - вы определитесь сначала, а потм мы вам пакажем пример для одного из случаев. 

P.S. Ковырял ардуиновский класс String - оказывается вполне ничего штука и если вам надо получить 3 символ строки то код такой:

String inputStr;

inputStr = "ABCD";

Serial.println(inputStr[2]); //Выведет C

inputStr.setCharAt(2,'&'); // заменит 3 символ на &

 

smcrim
Offline
Зарегистрирован: 14.11.2014

Спасибо за ответ, я уже вроде как подразобрался но не совсем, у меня постоянно теряются символы

if(Serial.available()>0){
    String packet = Serial.readString();
    char buffer[packet.length()];
    packet.toCharArray(buffer,packet.length());
    String command = strtok(buffer,":");
    if(command == "ADDRESS"){
      String _ip = strtok(NULL,":");
      String _mac = strtok(NULL,":");     
      writeDeviceAddress(_ip, _mac);
    }

тут из сериал вылазает честный ADDRESS:192.168.1.222:0xAA,0xAA,0xAA,0xAA,0xAA,0xAA затем я это всё передаю в функцию записи в EEPROM, и вот тут я так понимаю массивы начинают мне усложнять жизнь, а именно, после передачи миссивов в фукнции теряются последние символы, по одному (((

void writeDeviceAddress(String _ip, String _mac){
  Serial.println(_ip);
  Serial.println(_mac);  
  int lenIp = _ip.length();
  int lenMac = _mac.length();
  char wIP[lenIp];
  char wMac[lenMac];
  _ip.toCharArray(wIP, lenIp);
  _mac.toCharArray(wMac, lenMac);  
  for(int i = 0; i < lenIp; i++){
    EEPROM.write(START_OF_IP + i, wIP[i]);   
    delay(2);    
  }
  for(int m = 0; m < lenMac; m++){
    EEPROM.write(START_OF_MAC + m, wMac[m]);    
    delay(2);
  }    
}
в итоге айпи из 201 превращается в 20 , а мак из 0хАА в 0х (
Radjah
Offline
Зарегистрирован: 06.08.2014

Сделай ip-адрес в формате xxx.xxx.xxx.xxx, т.е. добивай октеты нулями и работай со смещениями.