Как из строки получить байт массив?
- Войдите на сайт для отправки комментариев
Ср, 22/02/2017 - 20:37
Имеется Ардуино+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);
}
}
Вы серьёзно собрались strtok применять к классу String?
А кто Вам собственно сказал, что читать из сериала нужно обязательно в переменную типа String? Сами создаёте себе проблемы, чтобы потом их геройски преодолевать?
В общем. выбросьте кашу из головы и прочитайте внимательно о работае со строками (с массивами char) хоть в том же Кернигане и Ритчи. Любые подсказки сейчас Вам не помогут - только добавят каши. Прочитайте разберитесь и подсказки не понадобятся.