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
相关产品推荐
相关产品推荐

