Преобразование строки в IP-адрес
Как преобразовать строку в IP-адрес на ардуино / esp ?
например, "192.168.1.2" -> IP-адрес(192, 168, 1, 2)
Попробовал это
void setup() {
Serial.begin(115200);
IPAddress apip;
const char *apipch;
apipch = "192.168.4.1";
Serial.println(apip.fromString(apipch));
}
void loop() {
}
Но я просто получаю вывод "1".
@strange_esp, 👍5
Обсуждение4 ответа
Класс IPAddress
имеет функцию-член bool fromString(const char *address)
.
const char *apipch = "192.168.4.1"
IPAddress apip;
if (apip.fromString(apipch)) { // попробуйте разобрать IP-адрес
Serial.println(apip); // вывести проанализированный IP-адрес
} else {
Serial.println("unparsable IP");
}
Это просто дает мне результат 1 к сожалению, @strange_esp
это происходит потому, что вы не используете его, например, не ожидаете, что возвращаемое значение будет содержать нужный ip-адрес, метод работает с ранее определенным объектом IPAddress., @Sim Son
Пожалуйста, проверьте функцию в IPAddress.cpp
файл строки 70 :
bool IPAddress::fromString(const char *address) {
// TODO: (IPv4) добавить поддержку форматов "a", "a.b", "a.b.c"
....
}
Я думаю, что вам нужно отбросить скобки из IPAdress ip()
в вашем коде, код должен быть следующим :
Void yourMethod (const char *addr, String ipStr){
IPAdreess ip;
bool i;
i = ip.fromString(ipStr);
if (i) {
for (int a = 0; a < 4; a++) {
addr[a] = ip[a];
....
}
}
}
Надеюсь, это поможет.
Вы могли бы сделать это:
String myip="192.168.1.2"
IPAddress local_IP;
bool x= local_IP.fromString(myip);
Это не добавляет ничего нового к уже приведенным ответам и комментариям., @the busybee
парень выше показал функцию, но не то, как ее использовать :), @TuLiO
Если вы имеете в виду ответ абу-амеда аль-катири, то нет. Этот ответ даже показывает больше контекста, чем ваш., @the busybee
IPAddress str2IP(String str) {
IPAddress ret( getIpBlock(0,str),getIpBlock(1,str),getIpBlock(2,str),getIpBlock(3,str) );
return ret;
}
int getIpBlock(int index, String str) {
char separator = '.';
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = str.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(str.charAt(i)==separator || i==maxIndex){
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found>index ? str.substring(strIndex[0], strIndex[1]).toInt() : 0;
}
- Как преобразовать строку в массив байтов
- Драйверы для чипа последовательного порта CH9102X
- Проблемы с преобразованием byte[] в String
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32: отключить детектор отключения питания
- Какую плату выбрать в PlatformIO для ESP Wroom 32?
- esp32 Stack canary watchpoint срабатывает
- Постоянная частота дискретизации АЦП на ESP8266 или ESP32
В ссылке есть две возможности, какую из них вы использовали? Если это не сработало, значит, вы сделали что-то не так, но я не могу догадаться, что вы сделали. Опубликуйте свой код, желательно самый короткий возможный бит - он не должен быть функциональным, только тот бит, где вы получаете свою строку (это строка или char []?), Как вы реализуете код преобразования и где вы вызываете функцию ip ()., @Msquare
пожалуйста, не говорите
не сработало
... вместо этого скажите: "вот что случилось ....` .... "не сработало" - это почти подло, @jsotolaip.fromString(s. c_str());
, @Juraj@Msquare добавил пример, попробовал оба кода, но они дали мне результат 1, @strange_esp
@jsotola ваше право извините, я добавил код и мой результат, @strange_esp
@Juraj это просто дало мне результат 1, @strange_esp
потому что вы печатаете возвращаемое значение fromString, а не IP - адрес. `Serial.println(apip);', @Juraj