Arduino环境下将字符串格式IP地址转换为IPAddress对象的方法
Arduino逗号分隔String类型IP转IPAddress对象方法
IPAddress类型的构造函数支持直接传入4个0~255的整数作为IP四段的值,所以转换的核心是把逗号分隔的String字符串拆分为四个合法的整数值,再传入构造函数即可。
基础实现示例
// 待转换的逗号分隔IP字符串 String rawIpStr = "192,168,1,1"; uint8_t ipSegments[4]; int currentSegIndex = 0; int segStartPos = 0; // 遍历字符串拆分四段IP数值 for (int i = 0; i <= rawIpStr.length(); i++) { // 遇到逗号或者到字符串末尾时,处理当前分段 if (rawIpStr.charAt(i) == ',' || i == rawIpStr.length()) { String segStr = rawIpStr.substring(segStartPos, i); ipSegments[currentSegIndex] = segStr.toInt(); currentSegIndex++; segStartPos = i + 1; // 拆满四段直接停止,避免数组溢出 if (currentSegIndex >= 4) break; } } // 生成IPAddress对象 IPAddress targetIp(ipSegments[0], ipSegments[1], ipSegments[2], ipSegments[3]);
你可以通过串口打印验证转换结果:
Serial.begin(115200); Serial.print("转换完成的IP地址:"); Serial.println(targetIp);
可复用工具函数封装
可以把转换逻辑封装为通用函数,同时支持自定义分隔符,适配逗号、点等不同分隔格式的IP字符串:
IPAddress strToIp(String ipStr, char separator = ',') { uint8_t ipSegs[4] = {0, 0, 0, 0}; int segIndex = 0; int startPos = 0; for (int i = 0; i <= ipStr.length() && segIndex < 4; i++) { if (ipStr.charAt(i) == separator || i == ipStr.length()) { ipSegs[segIndex] = ipStr.substring(startPos, i).toInt(); segIndex++; startPos = i + 1; } } return IPAddress(ipSegs[0], ipSegs[1], ipSegs[2], ipSegs[3]); } // 逗号分隔IP调用示例 IPAddress myIp1 = strToIp("192,168,1,100"); // 点分隔IP调用示例 IPAddress myIp2 = strToIp("192.168.1.100", '.');
注意事项
- 输入的IP字符串需要保证格式合法:四段0~255之间的整数,仅用指定分隔符分隔,无多余空格、特殊字符
- 如果输入字符串格式不合法,转换会默认把无效段赋值为0,不会触发程序崩溃
内容的提问来源于stack exchange,提问作者Wilson Filho
相关产品推荐
相关产品推荐

