本文共 5182 字,大约阅读时间需要 17 分钟。
来源: <>
atoi---ASCII to integer,将字符串转换成整形,从数字或正负号开始转换,一直到非数字为止
atof---ascii to float--字符串转换成浮点型
atol---ascii to long---字符串转换成长整形
gcvt---浮点型转换成字符串(四舍五入)
strtod---字符串转换成浮点型
strtol---字符串转换成长整形
strtoul--字符串转换成无符号长整形
toascii---将整形转换成合法的ASCII码字符
_ttoi---可以将CString转换成整形
_itot_s---将int转换成char*
一 字符串转数字
1.CRT函数 (需要的头文件 <stdlib.h> <math.h> <wchar.h>)
ASCII | UNICODE | TCHAR | VS2005 | |
int | atoi | _wtoi | _tstoi _ttoi | _atoi_l _wtoi_l |
long | atol | _wtol | _tstoi _ttoi | _atoi_l _wtoi_l |
__int64 | _atoi64 | _wtoi64 | _tstoi64 _ttoi64 | _atoi64_l _wtoi64_l |
float | _atoflt _atoflt_l | |||
double | atof | _wtof | _tstof _ttof | _atof_l _wtof_l _atodbl _atodbl_l |
long double | _atoldbl _atoldbl_l |
2.使用sscanf 头文件<stdio.h>
sscanf() 从一个字符串中读进与指定格式相符的数据。
原型:
int sscanf( const char *buffer,const char *format [,argument ] ... );
int scanf(const char *format [,argument]... );
其中参数 buffer:输入存储的数据;format:格式控制字符串
sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
例:(msdn里的例子)
#includeint main( void ){ char tokenstring[] = "15 12 14..."; char s[81]; char c; int i; float fp; // Input various data from tokenstring: // max 80 character string: sscanf( tokenstring, "%80s", s ); // C4996 sscanf( tokenstring, "%c", &c ); // C4996 sscanf( tokenstring, "%d", &i ); // C4996 将字符串转化为整数 sscanf( tokenstring, "%f", &fp ); // C4996 将字符串转化为浮点数 // Note: sscanf is deprecated; consider using sscanf_s instead // Output the data read printf( "String = %s/n", s ); printf( "Character = %c/n", c ); printf( "Integer: = %d/n", i ); printf( "Real: = %f/n", fp );}
输出结果:
String = 15Character = 1Integer: = 15Real: = 15.000000
其实sscanf很强大,功能类似于正则表达式,可以用于比较复杂的字符串处理。当只是单纯的将字符串转化为整数建议用第一种方法。
参考
3.Windows SDK:StrToInt
头文件 <shlwapi.h>
导入库 shlwapi.lib
二 数字转字符串
1.CRT函数
ASCII | UNICODE | TCHAR | VS2005 | |
int | itoa _itoa | _itow | _itot | |
long | ltoa _ltoa | _ltow | _ltot | |
__int64 | _i64toa | _i64tow | _i64tot | |
double | gcvt _gcvt _ecvt _fcvt | _wtof | _tstof _ttof | _gcvt_s _ecvt_s _fcvt_s |
2.使用sprintf 头文件<stdio.h>
原型:int sprintf(char *buffer,const char *format [,argument] ... );
将字符串格式化,buffer 格式化输出的字符串;format格式控制字符串;返回字符串长度。例:(msdn例子)
// crt_sprintf.c// compile with: /W3// This program uses sprintf to format various// data and place them in the string named buffer.#includeint main( void ){ char buffer[200], s[] = "computer", c = 'l'; int i = 35, j; float fp = 1.7320534f; // Format and print various data: 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 浮点数转化为字符串 // Note: sprintf is deprecated; consider using sprintf_s instead printf( "Output:/n%s/ncharacter count = %d/n", buffer, j );}输出:
String: computer Character: l Integer: 35 Real: 1.732053character count = 79
3.<strsafe.h>:StringCbPrintf
4.MFC/ATL:
CString::Format
例:
CString str; str.Format(_T("Floating point: %.2f/n"), 12345.12345); _tprintf("%s", (LPCTSTR) str); 输出:
Floating point: 12345.12
三 补充:
1 函数原型
字符串转int
int atoi(const char *string);
_int64 _atoi64(const char *string); int _wtoi(const wchar_t *string); _int64 _ wtoi64(const char *string);字符串转long
long atol(const char * string);
long _wtol(const wchar_t *string);字符串转double
double atof(const char *string);
double _wtof(const wchar_t *string);int转字符串
cahr *_itoa( int value,char *string,int radix);
char *_i64toa(_int64 value,char *string,int radix); char * _ui64toa(unsigned _int64 value,char *string, int radix); wchar_t * _itow(int value,wchar_t *string, int radix); wchar_t * _i64tow(_int64 value,wchar_t *string, int radix); wchar_t * _ui64tow(unsigned _int64 value,wchar_t *string, int radix); 参数的意义:value 是指要转换的整数,sring 是用来存放转换后结果的便利,radix是用来说明转换成几进制的数据,默认值是十进制数的。转换的进制范围是二进制到三十六进制。long转字符串
char *_ltoa( long value,char *string, int radix );
wchar_t *_ltow( long value, wchar_t *string, int radix ); 其中,参数 value 为被转换的值,参数string为字符串缓冲区,radix为进制。double转字符串
char *_fcvt( double value, int count, int *dec, int *sign );
其中参数value 为双精度数,参数count为转换的小数点后面的位数,dec表示小数点的位置, sign 表示符号。2 float与double的区别
单精度浮点数在机内占4个字节,用32位二进制描述。
双精度浮点数在机内占8个字节,用64位二进制描述。 浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。 数符占1位二进制,表示数的正负。 指数符占1位二进制,表示指数的正负。 尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点 指数存指数的有效数字。 指数占多少位,尾数占多少位,由计算机系统决定。 可能是数符加尾数占24位,指数符加指数占8位 -- float. 数符加尾数占48位,指数符加指数占16位 -- double. 知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。 对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。参考:
1
2
转载地址:http://dwqbi.baihongyu.com/