You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino:字节数组转String出现异常输出问题求助

解决byte数组转String出现多余特殊字符的问题

我来给你拆解下问题的核心原因,以及对应的解决办法:

问题根源

你用的String((char*)buffer2)这个构造函数,是把传入的指针当作以空字符'\0'结尾的C风格字符串来处理的。但你的buffer2是长度为18的数组,而你实际有效数据只有前16个字节——后面2个字节大概率是未初始化的垃圾值,而且你也没在有效数据的末尾添加'\0'作为结束标记。所以String会一直读取内存,直到碰到第一个'\0'为止,这就把那些多余的空格、特殊字符也包含进去了。

而你用for (uint8_t i = 0; i < 16; i++) { Serial.write(buffer2[i]); }循环打印时,明确只输出前16个有效字节,自然结果符合预期。

两种快速解决方案

  • 方案一(推荐):使用指定长度的String构造函数
    直接告诉String要取多少个字符,不用依赖'\0'结束符:

    String b = String((char*)buffer2, 16);
    

    这个方法不需要修改原数组,安全又直接,完美匹配你循环打印的有效数据范围。

  • 方案二:手动添加字符串结束符
    如果你一定要用原来的构造函数,可以在有效数据的末尾(第16个位置)手动添加'\0',注意要确保数组有足够空间:

    buffer2[16] = '\0'; // 因为buffer2长度是18,索引16是合法的
    String b = String((char*)buffer2);
    

    不过这个方法需要修改原数组,不如方案一灵活。

内容的提问来源于stack exchange,提问作者Alexander Hörl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:45:58