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
String 具有相同内容但比较始终返回false的字符串_String_Arduino_Esp32_Arduino C++ - Fatal编程技术网

String 具有相同内容但比较始终返回false的字符串

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

我有以下代码,其中使用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.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
 }