Как скопировать класс IPAddress в буфер символов? Получение ошибки: "inet_ntop' was not declared in this scope"

Я использую библиотеку Wi-Fi и пытаюсь сохранить IP-адрес в символьном буфере, чтобы можно было распечатать его на ЖК-дисплее, который принимает только символьные буферы. Мой код для этого:

 char * IPAD = new char[40
 IPAddress ip = WiFi.localIP();
 Serial.println(ip);
 char * bufIP = new char[40]();
 sprintf(bufIP, "%s", inet_ntop(ip));
 lcd.string(ip);

Но когда я скомпилирую это, я получаю ошибку:

"inet_ntop' was not declared in this scope"

Помощь?

, 👍-1

Обсуждение

попробуйте lcd.print(ip); Библиотеки lcd используют для реализации Print, а IPAddress реализует Printable, @Juraj

Моя библиотека ЖК-дисплеев принимает только элементы char* :(, @garson

затем используйте числа ip[0], ip[1], ip[2], ip[3], @Juraj

Какой ардуино вы используете?, @Craig


1 ответ


Лучший ответ:

3

IPAddress — это класс. Вы не можете использовать его как число (хотя в определенных обстоятельствах вы можете присвоить его uint32_t, и он даст вам числовое представление).

Кроме того, функции inet_* действительно актуальны только в системе POSIX с полным сетевым стеком, то есть на компьютере, а не в маленьком Arduino без надлежащего сетевого стека.

Однако вы можете легко получить доступ к отдельным байтам IP-адреса с помощью оператора [] и поместить их в массив символов правильного формата:

sprintf(bufIP, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
,