String 具有相同内容但比较始终返回false的字符串
我有以下代码,其中使用WiFi库,我对可用的WiFi网络进行扫描,并希望检测特定网络是否可用。我正在使用ESP32和Arduino IDE。EEPROM内存处理似乎可行,但我不明白为什么比较总是返回零String 具有相同内容但比较始终返回false的字符串,string,arduino,esp32,arduino-c++,String,Arduino,Esp32,Arduino C++,我有以下代码,其中使用WiFi库,我对可用的WiFi网络进行扫描,并希望检测特定网络是否可用。我正在使用ESP32和Arduino IDE。EEPROM内存处理似乎可行,但我不明白为什么比较总是返回零 SSID=EEPROM.readString(500);//我从eeprom读取存储在pos 500中的字符串 WiFi.模式(WiFi_STA); 延迟(100); Serial.println(logg+“SCAN!”); int n=WiFi.scanNetworks(); Serial.p
SSID=EEPROM.readString(500);//我从eeprom读取存储在pos 500中的字符串
WiFi.模式(WiFi_STA);
延迟(100);
Serial.println(logg+“SCAN!”);
int n=WiFi.scanNetworks();
Serial.println(logg+“SE DETECTARON:”+String(n)+“REDES WIFI!”);
对于(int i=0;i
我在串行监视器上得到的信息如下:
“WRT1900AC 2.4GHz”与“WRT1900AC 2.4GHz”的尺寸:16-16比较0
这两个字符串看起来相同,大小相同。我已经尝试用strcmp替换比较器“==”,得到-244。我还尝试使用
.c_str
如下:
WiFi.SSID(i.c_str()==SSID.c_str()
但结果是一样的。如果有人能提出一些建议,我会非常感激
这两个字符串看起来一样,大小相同
虽然WiFI.SSID()
返回一个字符串对象,但它不需要ASCII编码。字符串编码取决于路由器的区域设置,它看起来相同的原因是Serial.print()
将其转换为ASCII。下面的示意图可以证明这一点,即在ESP32中同时使用Serial.print()
和Serial.printf()
,其中显示了实际接收的内容(Serial.printf()
但是在ESP32实现中不支持Unicode格式,因此会产生一些垃圾字符)
如果你说这个c.str()比较返回-244,那么编辑你的问题并执行一个
Serial.printf()
在两个字符串上,或者最好通过charter循环字符串并打印出十六进制代码来查看发生了什么。您不能将c字符串与==
进行比较。这是您实际运行的代码吗?因为字符串(WiFi.SSID(i)==SSID)上缺少一个)
代码>所以这不可能编译。你是如何进行strcmp比较的?下面的Serial.print()
或c_str()
进行任何编码转换c_str()
只公开内部缓冲区,String类使用strcmp()
对这些内部缓冲区进行比较。您可以看到所有16个字符,因此也不是什么多字节问题。
int n = WiFi.scanNetworks();
for (int i=0; i<n; i++) {
// Serial.print() will cast the WiFi.SSID() to ASCII
Serial.print(WiFi.SSID(i));
// this shown what WiFi.SSID() truly return
Serial.printf(" --- %s\n", WiFi.SSID(i));
}
if(strcmp(WiFi.SSID(i).c_str(), SSID.c_str()) == 0) {
// match
}
else {
// not match
}