请教sprintf和串口发送的问题
test 为unsigned char 型变量
sprintf(Send_Sbuf,"%02d",test);
Send_String(Send_Sbuf) ;
Send_String函数
void Send_String(unsigned char *dat )
{
while(*dat)
{
Send_Serial(*dat);
dat++;
}
}
现象: 不论test 值为几,串口发送的值都是test*256+14的数值,比如test = 1 ,则串口发送270,请教为什么?程序有什么问题? 本帖最后由 wicy001 于 2015-6-1 16:53 编辑
你认为test = 1 时,应该发送什么?
----
补充编辑:我理解错了,是不正常啊。 先调试下 sprintf(Send_Sbuf,"%02d",test);send_Sbuf 存的什么,基本就判断出来是什么问题了
目测是 send_Sbuf 在其他函数里,被动了。
把程序这样改一下试试?
sprintf(Send_Sbuf,"%02d",(unsigned int)test);
wicy001 发表于 2015-6-1 17:00
先调试下 sprintf(Send_Sbuf,"%02d",test);send_Sbuf 存的什么,基本就判断出来是什么问题了
目测是 sen ...
Send_Sbuf 是在子函数单独定义的,目前是双串口发送,一个送TFT,一个送上位机,两个串口现象一样 steaven2000 发表于 2015-6-1 17:18
把程序这样改一下试试?
sprintf(Send_Sbuf,"%02d",(unsigned int)test);
昨天晚上在家我把test定义成unsigned int 就行了, 和您这方法产生了同样的效果,请教原因? langbaiyue 发表于 2015-6-2 08:21
昨天晚上在家我把test定义成unsigned int 就行了, 和您这方法产生了同样的效果,请教原因? ...
百度 sprintf函数原型,后面的参数如果是32位的,一样会出错。以上是经验总结,原因未知。
明白了,
%d,取变量时,是按照int来取的, 如果给的参数是char,就会把test及后面一个字节一块取了当参数。可以推断出,test后面的一个字节内容是14(0x0E)。 多谢两位指教! wicy001 发表于 2015-6-2 08:33
明白了,
%d,取变量时,是按照int来取的, 如果给的参数是char,就会把test及后面一个字节一块取了当参数 ...
是值传递又不是地址传递,但我也没搞清原因。 本帖最后由 wicy001 于 2015-6-2 11:00 编辑
steaven2000 发表于 2015-6-2 10:44
是值传递又不是地址传递,但我也没搞清原因。
int sprintf( char *buffer, const char *format, [ argument] … );
argument 是可变参量,可以传递1或N个参数,也可以传递不同类型的参量。argument 相当是个字符串,传递的是地址。
//补充: argument是跟在char *format之后,作为一个整体传递过去的。
页:
[1]