字符串与数字转换方法

字符串与数字转换方法

  8053人阅读  评论(0)  收藏  举报

一 字符串转数字

1.CRT函数  (需要的头文件 <stdlib.h> <math.h> <wchar.h>)

 ASCIIUNICODETCHARVS2005
intatoi_wtoi_tstoi 
_ttoi
_atoi_l 
_wtoi_l
longatol_wtol_tstoi 
_ttoi
_atoi_l 
_wtoi_l
__int64_atoi64_wtoi64_tstoi64 
_ttoi64
_atoi64_l 
_wtoi64_l
float   _atoflt 
_atoflt_l
doubleatof_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里的例子)

#include <stdio.h>

int 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    = 15
Character = 1
Integer:  = 15
Real:     = 15.000000
其实sscanf很强大,功能类似于正则表达式,可以用于比较复杂的字符串处理。当只是单纯的将字符串转化为整数建议用第一种方法。
参考 http://baike.baidu.com/view/1364018.htm

3.Windows SDK:StrToInt

头文件 <shlwapi.h> 

导入库 shlwapi.lib

 

二 数字转字符串

1.CRT函数

 ASCIIUNICODETCHARVS2005
intitoa 
_itoa
_itow_itot 
longltoa 
_ltoa
_ltow_ltot 
__int64_i64toa_i64tow_i64tot 
doublegcvt 
_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.

#include <stdio.h>

int 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.732053

character 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不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值