如何让printf支持输出00
本帖最后由 qinbin 于 2024-11-8 15:09 编辑在使用stc8h8k的串口驱动串口屏幕的时候,又想用printf(因为方便),但是输出不了00
/*帧头*/ /*总长*//*地址*/ /*内容*/
char tmp11[]={0x5A,0xA5,0x05,0x82,0x01,0x01,0x10,0x00};
char tmp12[]={0x5A,0xA5,0x05,0x82,0x01,0x02,0x10,0x01};
char tmp13[]={0x5A,0xA5,0x05,0x82,0x01,0x03,0x10,0x02};
第一个变量地址是1001,发的1000,应该是4096的,串口发送到0终止了,是程序的事情,第二个变量1002,发送的是1001,应该是4097,为什么没有正常显示,第三个变量地址1003,发送的是1002,应该是4098,正常显示
没明白你遇到了什么问题。你的屏幕上有9个数字,和你说的3个数字没什么联系,能更详细说说吗
另外,串口屏的协议文档呢 char tmp13[]={0x5A,0xA5,0x05,0x82,0x01,0x03,0x10,0x02};
printf(tmp13);
通过串口发送到串口屏上,串口屏再103的控件上显示1002也就是现在显示的4098
问题是tmp11发送不过去,通过监控串口上的数据发现发送0x5A,0xA5,0x05,0x82,0x01,0x01,0x10后断了 0x00这个好像真的输出不了 S2BUF=0x00;可以输出,就是这样以来,printf带来的方便就没了 任何对字符串的处理遇数值0都会退出,但可以printf字符0(数值0x30) 是不想用for循环发送么? qinbin 发表于 2024-11-8 15:13
char tmp13[]={0x5A,0xA5,0x05,0x82,0x01,0x03,0x10,0x02};
printf(tmp13);
通过串口发送到串口屏上,串口 ...
使用printf适合ascii码的字符类型数据,想要发送hex数据,建议还是自己写一个函数进行指定长度的发送。因为printf在没有遇到0x00的时候不会停止,万一后边的内存空间中不是0x00。会造成显示错乱。 哈哈哈,看了大佬们的讨论,终于知道楼主遇到了什么问题
楼主定义了char[]数组,然后尝试用printf将其发出去。
发现遇到\0的地方,printf就自己停了。
这是一件很自然的事情。
因为printf是用来发字符串的。至于楼主提到的
S2BUF=0x00;可以输出,就是这样一来,printf带来的方便就没了
它带来了什么方便呢?
或许楼主有些误区。
printf并非设计用来输出二进制数据,它是用来输出供人类阅读的文本 正确的(但不够优雅,因为是阻塞式的)做法如下:
void SendArray(const char* ptr,uint8_t size)
{
while(size--)
{
SBUF=*ptr++; //送一个新数据
while(!TI);//等待串口发送完成标志位
TI=0;//清除串口发送完成标志位
}
}
页:
[1]
2