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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: tv998

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

[复制链接]
 楼主| 发表于 2021-3-6 14:43 | 显示全部楼层
sangshu 发表于 2021-3-6 14:22
把奇偶校验去掉,SERIAL_8E1
或者换一个串口监视器,选择8位数据,校验位even,1个停止位。(arduinoide ...

OKOK.png
详见附图:
和奇数偶校验这些没关系的,我本身调试的时候,就没采用 Arduino 自带的串口监视器。

 楼主| 发表于 2021-3-6 15:47 | 显示全部楼层
https://blog.csdn.net/qq_34680219/article/details/86023062?utm_source=app
CSDN 上也有人讨论过相同这个问题,但没留下代码,我试着用 Strncmp 函数,也没调试成功。
发表于 2021-3-6 16:22 | 显示全部楼层
你是接收的非字符是吧?
unsigned char itea[] = {0xB0,0x70,0x00,0xC0,0x0};

if(!strcmp(comdata.c_str(),(const char*)itea))//这个语句始终无法正确判断

估计你是想这样,你试试。
 楼主| 发表于 2021-3-6 17:57 | 显示全部楼层
我接收的是单片机发来的 16 进制代码,我刚开始玩 Arduino 没几天,还有很多不懂和概念迷糊的地方,大神多多指导
发表于 2021-3-6 18:05 | 显示全部楼层
tv998 发表于 2021-3-6 17:57
我接收的是单片机发来的 16 进制代码,我刚开始玩 Arduino 没几天,还有很多不懂和概念迷糊的地方,大神多 ...

这样也不好,如果利用字符串比较,不要在数组中间出现0x00,因为,string类或者c语言的字符串,

都是以0x00作为字符串结尾的。因此0x00后面的,相当于没有参与比较。要么自行写一个比较函数,要么不要在比较的数组中出现0x00即可。。
 楼主| 发表于 2021-3-6 18:06 | 显示全部楼层
我把
unsigned char itea[] = {0xB0,0x70,0x00,0xC0,0x0};
改成
String “B07000C000"
也是调试不过。
发表于 2021-3-6 18:32 | 显示全部楼层
tv998 发表于 2021-3-6 18:06
我把
unsigned char itea[] = {0xB0,0x70,0x00,0xC0,0x0};
改成

你发送的不是字符,就不能这样比较。,这样代表10个字节,‘每个是一个16进制,

而你发送的是相当于4个字节。而且发送的还不是ascii码,发送大小写字母或者数字,才是能这样比较。

因此发送非字符的16进制,需要另外利用数组定义(16进制如0xb0),不能使用双引号实现。
发表于 2021-3-6 18:32 | 显示全部楼层
tv998 发表于 2021-3-6 18:06
我把
unsigned char itea[] = {0xB0,0x70,0x00,0xC0,0x0};
改成

1 uint8_t读取 for循环比较
2 有偿代写解决这个问题
 楼主| 发表于 2021-3-7 05:12 | 显示全部楼层
找到原因了,把 “B07000C0”用  ASCII 方式发送就有正常应答了,如果是 用 16 进制发送 ,发 42 30 37 30 30 30 43 30  也一样正常应答了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-29 11:37 , Processed in 0.076561 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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