《数字、string、wstring之间的相互转换》

本文介绍了C++中string和wstring的区别,以及如何在string和各种数字类型间进行转换,包括int、long、float等,并提供了详细的函数原型和示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用C++版本

C++11及更高版本

string和wstring的区别

<span style="color:#333333">wstring(wchar_t string)是宽char,Unicode编码,一般情况下一个字符占两个字节大小
string(char string)是窄char,<a data-cke-saved-href="https://www.baidu.com/s?wd=AscII%E7%BC%96%E7%A0%81&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao" href="https://www.baidu.com/s?wd=AscII%E7%BC%96%E7%A0%81&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao" class="baidu-highlight">AscII编码</a>,一个字符占一个字节大小</span>

string转数字

1、string转int

函数原型

int stoi (const string&  str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);

 

参数解析

str:

String object with the representation of an integral number.(用整数表示的字符串对象)

idx:
Pointer to an object of type size_t, whose value is set by the function to position of the next character in str after the numerical value.This parameter can also be a null pointer, in which case it is not used.(指向类型size_t的对象的指针,该对象的值由函数设置为在数值后的str中下一个字符的位置。这个参数也可以是一个空指针,在这种情况下不使用它。)
base:

 

Numerical base (radix) that determines the valid characters and their interpretation.If this is 0, the base used is determined by the format in the sequence (see strtol for details). Notice that by default this argument is 10, not 0.(确定有效字符及其解释的数字基数(基数)。如果这是0,那么所使用的基数由序列中的格式决定(详细信息请参见strtol)。注意,默认情况下这个参数是10,而不是0。)

 

微软官方示例代码

// stoi example
#include <iostream>   // std::cout
#include <string>     // std::string, std::stoi

int main ()
{
	std::string str_dec = "2001, A Space Odyssey";
	std::string str_hex = "40c3";
	std::string str_bin = "-10010110001";
	std::string str_auto = "0x7f";

	std::string::size_type sz;   // alias of size_t

	int i_dec = std::stoi (str_dec,&sz);
	int i_hex = std::stoi (str_hex,nullptr,16);
	int i_bin = std::stoi (str_bin,nullptr,2);
	int i_auto = std::stoi (str_auto,nullptr,0);

	std::cout << str_dec << ": " << i_dec << " and [" << str_dec.substr(sz) << "]\n";
	std::cout << str_hex << ": " << i_hex << '\n';
	std::cout << str_bin << ": " << i_bin << '\n';
	std::cout << str_auto << ": " << i_auto << '\n';
	system("pause");
	return 0;
}

输出结果

2、string转int

 

函数原型

long stol (const string&  str, size_t* idx = 0, int base = 10);
long stol (const wstring& str, size_t* idx = 0, int base = 10);

参数解析

str:
String object with the representation of an integral number.(用整数表示的字符串对象。)
idx:
Pointer to an object of type size_t, whose value is set by the function to position of the next character in str after the numerical value.(指向类型size_t的对象的指针,该对象的值由函数设置为在数值后的str中下一个字符的位置。)
This parameter can also be a null pointer, in which case it is not used.
base:
Numerical base (radix) that determines the valid characters and their interpretation.
If this is 0, the base used is determined by the format in the sequence (see strtol for details). Notice that by default this argument is 10, not 0.(确定有效字符及其解释的数字基数(基数)。如果这是0,那么所使用的基数由序列中的格式决定(详细信息请参见strtol)。注意,默认情况下这个参数是10,而不是0。)

微软官方示例代码

// stol example
#include <iostream>   // std::cout
#include <string>     // std::string, std::stol

int main ()
{
  std::string str_dec = "1987520";
  std::string str_hex = "2f04e009";
  std::string str_bin = "-11101001100100111010";
  std::string str_auto = "0x7fffff";

  std::string::size_type sz;   // alias of size_t

  long li_dec = std::stol (str_dec,&sz);
  long li_hex = std::stol (str_hex,nullptr,16);
  long li_bin = std::stol (str_bin,nullptr,2);
  long li_auto = std::stol (str_auto,nullptr,0);

  std::cout << str_dec << ": " << li_dec << '\n';
  std::cout << str_hex << ": " << li_hex << '\n';
  std::cout << str_bin << ": " << li_bin << '\n';
  std::cout << str_auto << ": " << li_auto << '\n';

  return 0;
}

输出结果

 

3、string转unsigned long

 

 

函数原型

unsigned long stoul (const string&  str, size_t* idx = 0, int base = 10);
unsigned long stoul (const wstring& str, size_t* idx = 0, int base = 10);

参数解析

str:
String object with the representation of an integral number.
idx:
Pointer to an object of type size_t, whose value is set by the function to position of the next character in str after the numerical value.
This parameter can also be a null pointer, in which case it is not used.
base:
Numerical base (radix) that determines the valid characters and their interpretation.

 

If this is 0, the base used is determined by the format in the sequence (see strtol for details). Notice that by default this argument is 10, not 0.

 

 

微软官方示例代码

// stoul example
#include <iostream>   // std::cin, std::cout
#include <string>     // std::string, std::stoul, std::getline

int main ()
{
	std::string str;
	std::cout << "Enter an unsigned number: ";
	std::getline (std::cin,str);
	unsigned long ul = std::stoul (str,nullptr,0);
	std::cout << "You entered: " << ul << '\n';
	system("pause");
	return 0;
}

输出结果

4、string转long long

5、string转unsigned long long

6、string转float

7、string转double

8、string转long double

数字string

数字转string类型统一使用to_string()函数进行转换,我的只支持convert long long to string、convert unsigned long long to string、convert long double to string这三种,可能是我的C++版本低了点,一般报错“参数不匹配”,注意更换,解决问题。

错误	1	error C2668: “std::to_string”: 对重载函数的调用不明确	
	3	IntelliSense: 有多个 重载函数 "to_string" 实例与参数列表匹配:	

函数原型

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

示例代码

// to_string example
#include <iostream>   // std::cout
#include <string>     // std::string, std::to_string
using namespace std;
int main ()
{
	std::string pi = "pi is " + to_string((long double)3.1415926);
	std::string perfect = to_string((long long)1+2+4+7+14) + " is a perfect number";
	std::cout << pi << '\n';
	std::cout << perfect << '\n';
	system("pause");
	return 0;
}

wstring转数字

1、convert wstring to int

stoi

2、convert wstring to long

stol

3、convert wstring to unsigned long

stoul

4、convert wstring to long long

stoll

5、convert wstring to unsigned long long

stoull

6、convert wstring to float

stof

7、convert wstring to double

stod

8、convert wstring to long double

stold

数字转wstring

数字转wstring类型统一使用to_wstring()函数进行转换,跟to_string一样的用法,同样的,我的也只支持convert long long to string、convert unsigned long long to string、convert long double to string这三种,可能是我的C++版本低了点,一般报错“参数不匹配”,注意更换,解决问题。

 

函数原型

wstring to_wstring (int val);
wstring to_wstring (long val);
wstring to_wstring (long long val);
wstring to_wstring (unsigned val);
wstring to_wstring (unsigned long val);
wstring to_wstring (unsigned long long val);
wstring to_wstring (float val);
wstring to_wstring (double val);
wstring to_wstring (long double val);

示例代码

// to_wstring example
#include <iostream>   // std::wcout
#include <string>     // std::wstring, std::to_wstring
using namespace std;
int main ()
{
	std::wstring pi = L"pi is " + to_wstring((long double)3.1415926);
	std::wstring perfect = to_wstring((long long)1+2+4+7+14) + L" is a perfect number";
	std::wcout << pi << L'\n';
	std::wcout << perfect << L'\n';
	system("pause");
	return 0;
}

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值