浮点型转化为字符串类型函数:char *_gcvt(double value,int digits,char *buffer)
code in my example:
double PI = 3.1415926;
char *strTemp = new char;
_gcvt(PI,10,strTemp);
m_SerialPort.WriteToPort((LPCTSTR)strTemp);
发现的问题:该函数会将遇到的第一个零(即0x00,也就是C中的NULL)作为字符串结束符'/0',比如,在将浮点数7.000转化为字符串时,转化后的字符串会变成[55'7' 46'.' 0' ' 48'0' 48'0'],字符串长度为2,而不是预想的5 。当将此转化回浮点数时,结束符'/0'后面的字符被忽略。
方法二:使用字符串格式化输出函数sprintf() ,函数调用方式如下。
int sprintf(char *string,char *format,arg_list);
在头文件中 #include<stdio.h>
返回值:字符串长度(strlen)
sprintf格式的规格如下所示。[]中的部分是可选的。
%[指定参数$][标识符][宽度][.精度]指示符
若想输出`%'本身时, 请这样`%%'处理。
1. 处理字符方向。负号时表示从后向前处理。
2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
3. 字符总宽度。为最小宽度。
4. 精确度。指在小数点后的浮点数位数。
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函数将所要输出的格式送到第一个参数,然后显示输出。sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现 "该程序产生非法操作,即将被关闭...."的提示。
因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。
字符串型转化为浮点型函数:double strtod(const char *nptr, char **endptr);
code in my example:
char *string,*strstop;
string="3.1415926";
double PI;
PI = strtod(string,&strstop);