赞
踩
最近在做项目时,我在通过串口发送一个类型强制转换的变量后出现了编译错误。
看了一些的例程,发现可以使用sprint()函数。
- sprintf((char *)DispText[0],"VA:%03d.%02dV ",ValueDlg.RmsVoltage[0]/100,ValueDlg.RmsVoltage[0]%100);
- sprintf((char *)DispText[1],"VB:%03d.%02dV ",ValueDlg.RmsVoltage[1]/100,ValueDlg.RmsVoltage[1]%100);
- sprintf((char *)DispText[2],"VC:%03d.%02dV ",ValueDlg.RmsVoltage[2]/100,ValueDlg.RmsVoltage[2]%100);
-
- UartData_Send((unsigned char *)DispText[0],strlen(DispText[0]));
- UartData_Send((unsigned char *)DispText[1],strlen(DispText[1]));
- UartData_Send((unsigned char *)DispText[2],strlen(DispText[2]));
以上函数可以简单的理解成springf把后面计算得到的值通过上面的绿色字符串的形式存到DispText [ ] 这个数组里,这样串口就可以发送字符串。
也就是所谓的数据格式化,以下是例子讲解。
- // 程序使用sprintf 将各种数据格式化后置于字符数组buffer中
- #include <stdio.h>
- int main( void )
-
- {
- char buffer[200], s[] = "computer", c = 'l';
- int i = 35, j;
- float fp = 1.7320534f;
- // 格式化并打印各种数据到buffer
- j = sprintf( buffer, " String: %s\n", s ); // C4996
- j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
- j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
- j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
-
- printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
- return 0;
- }
嵌入式里用的c库和教程里的c库不一定完全一样,keil里有设置可以选use microlib。
printf有时可以当串口 是因为有fputc这种方法重定向printf成串口打印了。类似于取一个名字叫printf的函数代替c库里的。
sprintf没有重定向的话一般都是c库里<stdio.h>的用法。具体底层 c库和一些桩函数,有机会还是要多去看C语言编译相关的底层知识。 Zaaaao
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。