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

字符串比较

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

14

主题

15

回帖

104

积分

注册会员

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

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


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


高手给指点一下
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:366
  • 最近打卡:2026-03-31 16:31:44

844

主题

1万

回帖

2万

积分

管理员

积分
22789
发表于 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









回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:366
  • 最近打卡:2026-03-31 16:31:44

844

主题

1万

回帖

2万

积分

管理员

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


截图202603172253462020.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:366
  • 最近打卡:2026-03-31 16:31:44

844

主题

1万

回帖

2万

积分

管理员

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

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

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:89
  • 最近打卡:2026-03-31 10:30:08
已绑定手机

4

主题

243

回帖

879

积分

高级会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-4-1 08:57 , Processed in 0.104808 second(s), 59 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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