String、CString、char*、int、float、double相互转换

向右看齐 2022-08-05 05:19 286阅读 0赞

不同数据类型之间的转换可以说用得特别频繁,我也是经常查,索性就将其全部整理出来。

一、String和int、float、double的转换

源代码StringAndNumberConvertor:http://download.csdn.net/detail/z702143700/8785721

1. Stringstream

使用很简单,也很方便,个人比较喜欢的用法,直接上代码:

  1. template<typename T>
  2. static T StringToNumber(const string&desString)
  3. {
  4. istringstreamiss(desString);
  5. Tresult;
  6. iss>> result;
  7. returnresult;
  8. }
  9. template<typename T>
  10. static string NumberToString(T desNumber)
  11. {
  12. ostringstreamoss(desNumber);
  13. stringresult;
  14. //oss<< desNumber;
  15. //特别提出这里不能这样写,否则float、double就不能被正确地转换。
  16. result= oss.str();
  17. returnresult;
  18. }

2. atoi、atol、atof和_itoa、_ltoa(_itoa_s、_ltoa_s安全转换函数)

atoi、atol、atof是从字符串到数字的转换,_itoa_s、_ltoa_s是从数字到字符串的转换。

示例:

  1. static intStringToInt(string& desString){
  2. returnatoi(desString.c_str());
  3. }
  4. char c2[32];
  5. _itoa_s(desNumber,c2,32,10);//10位有效数字,因为int最大是21亿。
  6. return c2;

3. strtol、strtoul、strtod

不怎么用的方法:

double a =strtod(desString.c_str(),NULL);

4. Sprintf和sscanf

就像控制台的printf和scanf、文件输入输出的fprintf和fscanf一样,sprintf和sscanf是用于字符串的输入输出。它们属于C方式的字符串格式化,printf_s和sscanf_s表示安全转换方法。

Sscanf表示将字符串buffer中的特定字符提取成指定的(format)格式。

intsscanf(const char *buffer,const char *format [,argument ] … );

int表示转换成功的个数,buffer表示要提取的目的字符串,format 表示提取格式,argument 表示保存提取的值。

Sprintf表示将format格式中的字符放入到buffe中。

intsprintf(char *buffer,const char *format [,argument] … );

参数解释同sscanf。

5. _gcvt_s将double转换成string

这个方法多用于double中:

  1. char c2[32];
  2. _gcvt_s(c2,32,desNumber,20);
  3. return c2;

二、String和char*的转换

  1. String str = "Hello";
  2. char* c_str = str.c_str(); //转换成c类型的字符串
  3. char* pstr = str.data(); //转换成字符数组

三、String和Cstring的转换

  1. //string转成Cstring
  2. string str = "hello";
  3. Cstring cstr = str.c_str();或者 Cstring cstr = str.data();
  4. c_str()和data()的区别在于前者返回带'/0'的字符串,后者不带
  5. cstr.Format("%s", str.c_str());
  6. cstr.Format("%s", str.data());
  7. //Cstring转成string
  8. str = cstr.GetBuffer(0);
  9. str = LPCSTR(cstr);

四、Cstring和char*的转换

  1. char* ptchar = cstr.GetBuffer(0);
  2. //注意char*是不同类型转换之间的桥梁!!!

五、Cstring和int、float、double的转换

  1. int n = 123;
  2. CString cstr;
  3. cstr.Format("%d", n);
  4. n = atoi(cstr);//CString转成int
  5. atof,atol 分别是CStringfloat long

发表评论

表情:
评论列表 (有 0 条评论,286人围观)

还没有评论,来说两句吧...

相关阅读