C++整型、浮点型与字符串型相互转换
更多内容请访问 www.uusystem.com
前言
整型、浮点型与字符串的相互转换可以用自带的函数来实现,本人使用的是vs2015,所以下面有些函数需要改变一下,请看下面的总结。
正文
一、整型转字符串型
1. int转为字符串
itoa(int _Value, char *_Buffer, int _Radix);
需改为_itos_s(int _Value, char *_Buffer, size_t _BufferCount, int _Radix);
_Radix:表示进制,若十进制则Radix为10
_BufferCount:存储的大小,不可以比Buffer的长度大
#include <iostream> using namespace std; void main() { int num = 10; char str[3]; // str的长度最少为3,因为10虽然两位,但还有一个结束符 _itoa_s(num, str, sizeof(str), 10); // int转为字符串 cout << str << endl; // 输出结果为10 }
2. long int转为字符串
ltoa(long _Value, char *_Buffer, int _Radix);
改为_ltoa_s(long _Value, char *_Buffer, size_t _BufferCount, int _Radix);
3. 无符号长整型转为字符串
ultoa(unsigned long _Value, char *_Buffer, int _Radix);
改为_ultoa_s(unsigned long _Value, char *_Buffer, size_t _BufferCount, int _Radix);
4. int型转为宽字符串型
_itow(int _Value, wchar_t *_Buffer, int _Radix);
改为_itow_s(int _Value, wchar_t *_Buffer, size_t _BufferCount, int _Radix);
二、浮点型转字符串型
1. double型转为字符串
gcvt(double _Value, int _DigitCount, char* _DstBuf);
改为_gcvt_s(char* _Buffer, size_t _BufferCount, double _Value, int _DigitCount);
说明:显示正负号、小数点
_Digitcount:显示的位数,如1.25,显示两位是1.3(四舍五入),显示三位是1.25
#include <iostream> using namespace std; void main() { double num = -1.235; char str[7]; // 在字符串中,正负号、小数点、结束符各占一位 _gcvt_s(str, sizeof(str), num, 3); // double转为字符串,显示三位,1.235四舍五入为1.24 cout << str << endl; // 输出结果为-1.24 }
2. double转换为字符串
ecvt(double _Value, int _DigitCount, int *_PtDec, int *_PtSign);
改为_ecvt_s(char *_Buffer, size_t _BufferCount, double _Value, int _DigitCount, int *_PtDec, int *_PtSign);
说明:不显示小数点和正负号
_PtDec:表示小数点位置,若_PtDec为1,说明小数点左边有一个数
_PtSign:表示正负号,0为正数,1为负数
#include <iostream> using namespace std; void main() { double num = -1.235; int Dec, Sign; // Dec:小数点位置,Sign:正负号 char str[5]; // ?至少5位 _ecvt_s(str, sizeof(str), num, 3, &Dec, &Sign); // double转str,剔除正负号和小数点,显示三位,1235四舍五入为124 cout << str << endl; // 输出结果为124 cout << Dec << endl; // 输出结果为1,小数点左面有一个数 cout << Sign << endl; // 输出结果为1,是负数 }
3. double转换为字符串
fcvt(double _Value, int _FractionalDigitCount, int *_PtDec, int *_PtSign);
改为_fcvt(char *_Buffer, size_t _BufferCount, double _Value, int _FractionalDigitCount, int *_PtDec, int *_PtSign);
说明:转换结果中不包含小数点和正负号
_FractionalDigitCount:取小数位数,若_FractionalDigitCount为1,则取一位小数,要四舍五入
#include <iostream> using namespace std; void main() { double num = -1.235; int Dec, Sign; // Dec:小数点位置,Sign:正负号 char str[5]; // ?至少5位 _fcvt_s(str, sizeof(str), num, 2, &Dec, &Sign); // double转str,剔除正负号和小数点,取两位小数,1235四舍五入为124 cout << str << endl; // 输出结果为124 cout << Dec << endl; // 输出结果为1,小数点左面有一个数 cout << Sign << endl; // 输出结果为1,是负数 }
三、字符串型转整型
1.将字符串转为int型
int atoi(const char *_String);
2. 将字符串转为long型
long atol(const char *_String);
3. 将字符串转为long型,并报告不能被转换的所有剩余部分
long strtol(const char *_String, char **_EndPtr, int _Radix);
_Radix:表示进制,范围为2~36和0
_EndPtr:指向字符串中不合法的部分
说明:若_Radix为2,则‘0’、‘1’合法,若_Radix为10,则‘0’、‘1’……‘9’合法,若_Radix为16,则‘0’,‘1’……‘f’合法
#include <iostream> using namespace std; void main() { long num_2, num_8, num_10, num_16; char str[20] = "1079aeg"; char *str1; num_2 = strtol(str, &str1, 2); // 二进制,10合法 cout << num_2 << endl; // 输出2,二进制10在十进制中为2 cout << str1 << endl; // 输出不合法的79aeg num_8 = strtol(str, &str1, 8); // 8进制,107合法 cout << num_8 << endl; // 输出71,八进制107在十进制中为71 cout << str1 << endl; // 输出不合法的9aeg num_10 = strtol(str, &str1, 10); // 10进制,1079合法 cout << num_10 << endl; // 输出1079 cout << str1 << endl; // 输出不合法的aef num_16 = strtol(str, &str1, 16); // 十六进制,1079ae合法 cout << num_16 << endl; // 输出1079726,十六进制1079ae在十进制中为1079726 cout << str1 << endl; // 输出不合法的g }
------
如若想详细了解该函数,请看strtol()详解
4. 将字符串转为无符号长整型值,并报告不能被转换的所有剩余部分
unsigned long strtoul(const char *_String, char **_EndPtr, int _Radix);
四、字符串型转浮点型
1. 将字符串转换为双精度浮点型值
double atof(const char *_String);
2. 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
double strtod(const char *_String, char **_EndPtr);