字符串是否对比该使用哪个函数?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5673|回复: 18

[未解决] 字符串是否对比该使用哪个函数?

[复制链接]
发表于 2021-3-4 22:14 | 显示全部楼层 |阅读模式
现有问题是,
               串口接收到的数据是正常的,(通过print函数打印串口收到的数据,与我用上位机软件发出的数据是一样的)
               串口对外发送数据也是正常的,
               现在问题出在字符串是否相同这个比较判断上,
               网上我能找到的帖子里介绍方法都试了一遍,问题还没解决。

源码功能,就是收到上位机发来的命令后,先判断收到的命令,是否与已知的命令相同?如果相同则给上位机返回一个命令。求助前辈门指导一下迷津,谢谢。
00000.png
发表于 2021-3-5 09:04 | 显示全部楼层
cdjo定义有问题吧,
发表于 2021-3-5 10:27 | 显示全部楼层
试试
(1) XXX.equals(YYY);
(2) strcmp(XXX.c_str(), YYY.c_str()) ==0)
发表于 2021-3-5 10:50 | 显示全部楼层
定义字符串用 String
 楼主| 发表于 2021-3-5 21:36 | 显示全部楼层
王尼玛1 发表于 2021-3-5 10:50
定义字符串用 String

改成定义字符串用 String 后,
# include <stdlib.h>
# include <string.h>
String cdjo = "B07000C0";
String comdata = "";

调用

if(strcmp(comdata,cdjo)==0),//判断 2 个字符串是否相同

编译器提示
cannot convert 'String' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'
编译无法通过
发表于 2021-3-5 22:32 | 显示全部楼层
tv998 发表于 2021-3-5 21:36
改成定义字符串用 String 后,
# include
# include

直接==判断即可
 楼主| 发表于 2021-3-5 22:34 | 显示全部楼层

问题是:
           直接==判断 ,即使判断条件成立,也无法进入 if 的后续语句啊。
 楼主| 发表于 2021-3-5 23:26 | 显示全部楼层

  1. # include <stdlib.h>
  2. # include <string.h>
  3. String cdjo = "B07000C0";
  4. String comdata = "";
  5. unsigned char itea[6] = {0xB0,0x70,0x30,0x1C,0x77,0xEC};

  6. void setup() {
  7.   
  8.   Serial.begin(9600,SERIAL_8E1);
  9.   while(Serial.read() >= 0){}//清除串口缓冲区
  10. }

  11. String readLine()//读整行字符串子程序
  12. {
  13.   String comdata="";
  14.   while(Serial.available())
  15.   {
  16.     comdata += char(Serial.read());
  17.     delay(2);
  18.   }
  19. return comdata;
  20. }

  21. void loop()
  22. {
  23.         comdata=readLine();//读整行字符串
  24.       //Serial.print(comdata);//调试用,执行到这里都正常
  25.       if(comdata=="B07000C0")//这个语句始终无法正确判断
  26.         {
  27.           Serial.print(comdata);//调试用
  28.           //Serial.write(itea,6);
  29.           comdata = "";
  30.           while(Serial.read() >= 0){}//清除串口缓冲区
  31.           delay(200);
  32.         }

  33. }

复制代码
 楼主| 发表于 2021-3-5 23:30 | 显示全部楼层
kevinzhang19701 发表于 2021-3-5 10:27
试试
(1) XXX.equals(YYY);
(2) strcmp(XXX.c_str(), YYY.c_str()) ==0)

谢谢你的答复,这个 2 个函数我已经都试过,也是无法正确判断。(细看图片,我里面注解,已经测试过的,都不正常的函数)
发表于 2021-3-6 14:22 | 显示全部楼层

把奇偶校验去掉,SERIAL_8E1
或者换一个串口监视器,选择8位数据,校验位even,1个停止位。(arduinoide的默认无校验)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 11:55 , Processed in 0.079378 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表