Как из строки получить байт массив?

Radzhab
Offline
Зарегистрирован: 22.09.2012

Имеется Ардуино+Ethenet shield. Хочу динамически изменять ip в зависимости от того, что придет на вход порта.

Вся проблема кроется в том что входная строка имеет тип String, а метод Ethernet.begin принимает на вход byte array. В общем никак не пойму как эту строку правильно сконвертировать. Пытался сделать велосипед, переведя строку в char array, а потом уже в byte array. Не получилось.

 

#include <SPI.h>
#include <Ethernet.h>
String readString;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
//byte ip[] = { 192, 168, 1, 102 }; // ip in lan assigned to arduino
//byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
//byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
byte myserver[] = { 208, 104, 2, 86 }; // zoomkat web page server IP address
EthernetClient client;
//////////////////////


void initEthernetConfig(byte ip[])
{

  Ethernet.begin(mac, ip);
  //Ethernet.begin(mac, ip, subnet, gateway);
  Serial.begin(9600); 
  Serial.println("Better client test 12/01/11"); // so I can keep track of what is loaded
  Serial.println("Send an e in serial monitor to test"); // what to do to test
}

void setup(){
  byte ip[] = { 10, 28, 33, 4 };
 // initEthernetConfig(ip);
}

void loop(){
  // check for serial input

   while (Serial.available()) {
    char c = Serial.read();  //gets one byte from serial buffer
    readString += c; //makes the String readString
    delay(2);  //slow looping to allow buffer to fill with next character
  }

  if (readString.length() >0) {
  byte inArray[4];
  char * tokens;
    int i = 0;    
    tokens = strtok(readString, ".");
    while (tokens != NULL) {
        inArray[i] = atoi(tokens);
        tokens = strtok(NULL, ".");
        i++;
    }
  initEthernetConfig(ip);
  }

} 

 

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

Вы серьёзно собрались strtok применять к классу String?

А кто Вам собственно сказал, что читать из сериала нужно обязательно в переменную типа String? Сами создаёте себе проблемы, чтобы потом их геройски преодолевать?

В общем. выбросьте кашу из головы и прочитайте внимательно о работае со строками (с массивами char) хоть в том же Кернигане и Ритчи. Любые подсказки сейчас Вам не помогут - только добавят каши. Прочитайте разберитесь и подсказки не понадобятся.