Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino显示以太网.localIP()_Arduino_Ethernet - Fatal编程技术网

Arduino显示以太网.localIP()

Arduino显示以太网.localIP(),arduino,ethernet,Arduino,Ethernet,我正在尝试将设备的IP地址分配给字符串变量。当我使用Serial.println(Ethernet.localIP())进行测试时,它以八位字节的形式显示IP地址。如果我使用字符串(Ethernet.localIP())然后将其显示为十进制 有没有办法将八位字节格式指定给变量 String MyIpAddress; void StartNetwork() { Print("Initializing Network"); if (Ethernet.begin(mac)

我正在尝试将设备的IP地址分配给字符串变量。当我使用
Serial.println(Ethernet.localIP())
进行测试时,它以八位字节的形式显示IP地址。如果我使用
字符串(Ethernet.localIP())然后将其显示为十进制

有没有办法将八位字节格式指定给变量

 String MyIpAddress;

 void StartNetwork()
 {
     Print("Initializing Network");
     if (Ethernet.begin(mac) == 0) {
     while (1) {
       Print("Failed to configure Ethernet using DHCP");
       delay(10000);
     }
   }
   Serial.println(Ethernet.localIP());        //displays: 192.168.80.134
   MyIpAddress = String(Ethernet.localIP());
   Serial.println(MyIpAddress);               //displays: 2253433024
 }

原来IPAddress属性是一个数组。显示IP地址的一种简单方法如下:

String DisplayAddress(IPAddress address)
{
 return String(address[0]) + "." + 
        String(address[1]) + "." + 
        String(address[2]) + "." + 
        String(address[3]);
}

更轻量级的方法是:

char* ip2CharArray(IPAddress ip) {
  static char a[16];
  sprintf(a, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
  return a;
}
IP地址的最大长度为15个字符,因此16个字符的缓冲区就足够了。将其设置为
静态
可确保内存寿命,因此您可以安全地将其返回

另一种方法:调用者可以提供字符缓冲区:

void ip2CharArray(IPAddress ip, char* buf) {
  sprintf(buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
}

好球!谢谢你节省了时间!