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

字符串比较

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2026-03-24 07:10:32
已绑定手机

16

主题

13

回帖

104

积分

注册会员

积分
104
发表于 2026-3-17 19:25:08 | 显示全部楼层 |阅读模式
u8 xdata RxBuf[256];

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


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


高手给指点一下
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 2026-3-17 22:52:35 | 显示全部楼层

高手  千问,豆包
截图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









回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 2026-3-17 22:53:59 | 显示全部楼层
截图202603172253226768.jpg


截图202603172253462020.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2026-07-03 08:57:36

830

主题

1万

回帖

2万

积分

管理员

积分
23929
发表于 2026-3-17 22:55:23 | 显示全部楼层
这 豆包 这么疯狂的回答,难怪 MEMORY 疯涨

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:142
  • 最近打卡:2026-07-04 10:53:37
已绑定手机

5

主题

331

回帖

6374

积分

论坛元老

积分
6374
发表于 2026-3-18 09:17:24 | 显示全部楼层
RxBuf的内容发到串口助手看看呗,“文本模式”、“HEX模式”都开启。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-5 14:58 , Processed in 0.072102 second(s), 65 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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