找回密码
 立即注册
查看: 38|回复: 4

字符串比较

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2026-03-17 19:25:08
已绑定手机

13

主题

14

回帖

95

积分

注册会员

积分
95
发表于 昨天 19:25 | 显示全部楼层 |阅读模式
u8 xdata RxBuf[256];

        if (!(strncmp(RxBuf,"12345678AABBCCDD", 16)))
        {        PrintString2("1---2---3---4---\n\r");
        }


执行不正确。不知道 问题出在哪里


高手给指点一下
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:357
  • 最近打卡:2026-03-17 22:40:07

843

主题

1万

回帖

2万

积分

管理员

积分
22710
发表于 昨天 22:52 | 显示全部楼层

高手  千问,豆包
截图202603172251526830.jpg

问题分析
  • strncmp 函数的特性:

    • strncmp 是按字节比较字符串,要求被比较的内存区域必须是有效的 ASCII 字符(0x00-0x7F),且通常期望以 \0 结尾(虽然 strncmp 按长度比较,但数据异常仍会导致结果错误)。
    • 你的比较长度是 16,但如果 RxBuf 中实际接收的字节不是 12345678AABBCCDD 对应的 ASCII 码(比如是十六进制字节而非字符),比较结果必然不相等。
    • 示例:"A" 的 ASCII 码是 0x41,而如果 RxBuf 中存的是十六进制 0xAA(而非字符 'A'),两者完全不同。

  • RxBuf 数据来源问题:

    • 你用的是 u8 xdata RxBuf[256](51 单片机的扩展 RAM 数组),串口接收的数据可能存在:
      • 接收字节数不足 16 个;
      • 数据包含不可见字符(如换行、空格、校验位);
      • 接收顺序错误或字节丢失;
      • 数据是十六进制字节(如 0x12、0x34)而非字符('1'、'2')。



  • 代码逻辑的潜在问题:

    • 缺少对 RxBuf 接收完成的判断(比如未检查接收长度是否为 16);
    • 没有排除接收过程中的干扰字节。



修正后的代码(可直接运行)
c









回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:357
  • 最近打卡:2026-03-17 22:40:07

843

主题

1万

回帖

2万

积分

管理员

积分
22710
发表于 昨天 22:53 | 显示全部楼层
截图202603172253226768.jpg


截图202603172253462020.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:357
  • 最近打卡:2026-03-17 22:40:07

843

主题

1万

回帖

2万

积分

管理员

积分
22710
发表于 昨天 22:55 | 显示全部楼层
这 豆包 这么疯狂的回答,难怪 MEMORY 疯涨

自己问下 豆包, 为何你还是没搞定
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2026-03-18 09:10:47
已绑定手机

4

主题

220

回帖

810

积分

高级会员

积分
810
发表于 11 小时前 | 显示全部楼层
RxBuf的内容发到串口助手看看呗,“文本模式”、“HEX模式”都开启。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-18 20:25 , Processed in 0.108843 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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