C/C++数据类型转换小结

标签: C 字符串 变量类型转换 编程 数值转换
48237人阅读 评论(0) 收藏 举报
分类:

在编程的过程中,经常遇到变量类型转换问题,在此小结一下:

以下程序的头文件

#include<iostream>
#include<string>
#include<sstream> 
using namespace std;

(1)char*      char[]     到string的转换:

//char*  to  string
int CP1()
{
	char *p = "abcd";
	char t[] = "abcde";
	string test;
	test = p;
	cout << test << endl;
	cout << test.length() << endl;

	test = t;
	cout << test << endl;
	cout << test.length() << endl;
	return 0;
}
(2)string 到 char * 的转换:

//string  to  char*
int CP2()
{
	string test = "abc";
	char t[10];
	strcpy(t, test.c_str());
	cout << t << endl;
	cout << strlen(t) << endl;

	char *te;
	int number = test.length();
	te = new char[number + 1];
	cout << number << endl;
	/*test.copy(te, number, 0);
	*(te+number) = '0';
	cout << te << endl;*/

	strcpy(te, test.c_str());
	cout << te << endl;
	cout << strlen(te) << endl;

	delete[] te;
	return 0;		 
}
(3)string到const char* 的转换:

//string  to  const char*
int CP3()
{
	const char* c;
	string test = "1234";
	c = test.c_str();
	cout << c << endl;
	const char* t;
	t = test.data();
	cout << t << endl;
	return 0;
}
(4)int 到 string的转换:
//int to string
int CP4()
{
	int nt = 30;
	char c[30];

	//using C template to trans from int to string
	itoa(nt, c, 10);//参数3为进制,以几进制转换为 char
	cout << c << endl;
	cout << strlen(c) << endl;

	//using stringstream to trans from int to string
	stringstream test;
	test << nt;
	string stest = test.str();
	cout << stest << endl;
	cout << stest.length() << endl;

	//using to_string to trans from int to string  as the same double and float
	string str= to_string(nt);
	cout << str << endl;
	cout << str.length() << endl;
	return 0;
}
(5)string到int的转换:

//string to int
int CP5()
{
	string test = "17";
	char* t;
	int nt = static_cast<int>(strtol(test.c_str(), &t, 10));//10 表示转换进制
	cout << nt << endl;

	int nte;
	sscanf(test.c_str(), "%d", &nte);//%d 表示十进制
	cout << nte << endl;

	//using stringstream to trans from string to int
	stringstream stest;
	stest << test;
	int ntes;
	stest >> ntes;
	cout << ntes << endl;

	//using C template to trans from string to int
	int ntest = atoi(test.c_str());
	cout << ntest << endl;
	
	//using C++ template to trans from string to int
	int nnt;
	nnt = stoi(test.c_str());
	cout << nnt << endl;
	return 0;
}
(6)string 到 double的转换:

//string to double
int CP6()
{
	string test = "17.101";
	//using C template to trans from doubel to string
	double t = atof(test.c_str());
	cout << t << endl;
	return 0;
}

数值类型到string的转换可以有以下几种方式:

(1)使用函数模板+stringstream

(2)使用标准库函数std::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);
(3)使用C标准库函数:
atoi(str.c_str());
strtoul(str.c_str(), NULL, 10);
atof(str.c_str());
(4)使用C++标准库函数:

stoi()

在调用windowAPI函数的时候经常会遇到char与wchar的问题,在此贴出两者之间的转换函数:

(1)string  to WString

BOOL StringToWString(const std::string &str,std::wstring &wstr)
 {    
     int nLen = (int)str.length();    
     wstr.resize(nLen,L' ');
 
     int nResult = MultiByteToWideChar(CP_ACP,0,(LPCSTR)str.c_str(),nLen,(LPWSTR)wstr.c_str(),nLen);
 
     if (nResult == 0)
     {
         return FALSE;
     }
 
     return TRUE;
 }
(2)WString  to   string
BOOL WStringToString(const std::wstring &wstr,std::string &str)
 {    
     int nLen = (int)wstr.length();    
     str.resize(nLen,' ');
 
     int nResult = WideCharToMultiByte(CP_ACP,0,(LPCWSTR)wstr.c_str(),nLen,(LPSTR)str.c_str(),nLen,NULL,NULL);
 
     if (nResult == 0)
     {
         return FALSE;
     }
 
     return TRUE;
 }
(3)String    to    Wstring
std::wstring StringToWString(const std::string &str)
 {
     std::wstring wstr(str.length(),L' ');
     std::copy(str.begin(), str.end(), wstr.begin());
     return wstr; 
 }
(4)  Wstring    to   string
std::string WStringToString(const std::wstring &wstr)
 {
     std::string str(wstr.length(), ' ');
     std::copy(wstr.begin(), wstr.end(), str.begin());
     return str; 
 }

APPENDED

利用ATL进行char*与wchar*(char*与CString)之间的转换

需要包含宏

USES_CONVERSION; 

CString到char*

利用函数T2A(CString);

char*到CString

使用函数A2T(char*);






查看评论

C++/C数据类型转换小结

几个问题作为开端:如果在编写代码的时候,如果将一个基本类型转换为一个类对象?反过来,如何将一个类对象转换成一个基本的数据类型?什么是隐式类型转换?什么是显式类型转换?读完这边文章,你可以清楚的了解在编...
  • z_shaowu
  • z_shaowu
  • 2012-08-10 13:21:22
  • 1858

C/C++各种数据类型转换汇总

C/C++各种数据类型转换汇总!
  • fengbingchun
  • fengbingchun
  • 2015-10-25 16:20:11
  • 2384

python与C/C++中基本类型的相互转换 struct.pack

使用struct.pack一定要注意是在64位系统还是32位系统。 如struct.pack(L, 1) 返回长度在64位系统 返回长度是8,32位系统 回返是4以下自己写个转换算法  DWORD_L...
  • toontong
  • toontong
  • 2009-07-29 17:04:00
  • 7783

c++ 数据类型转换

  • 2011年06月21日 11:25
  • 28KB
  • 下载

C++之基本数据类型转换和转换函数

C++语言中类型转换有两种:隐式转换和强制转换。在类型转换的过程中还有保值转换和非保值转换之分。保值转换是安全的,数据精度不会受到损失,如数据类型有低向高转换;非保值转换是不安全的,数据精度会受到损失...
  • erlian1992
  • erlian1992
  • 2015-02-04 16:35:23
  • 1553

C/C++調用Python的數據類型轉換

 C與Python相互調用函數時,函數間的參數傳遞需要進行轉換。近幾天試了下C++Builder調用Python的函數,也記一下來方便以後查。1、C數據到Python數據轉從C數據類型轉成Python...
  • moxien
  • moxien
  • 2008-07-19 15:41:00
  • 4304

C/C++数据类型的转换之终极无惑

数据类型在编程中经常遇到,虽然可能存在风险,但我们却乐此不疲的进行数据类型的转换。下面进行一一讲解!...
  • K346K346
  • K346K346
  • 2015-08-18 13:53:27
  • 5003

C++常用数据类型转换详解

转自:http://hi.baidu.com/zhenlu_123/blog/item/b744dd3c3e5180e63c6d97eb.html 我们先定义一些常见类型变量借以说明:int i = ...
  • wfqxx
  • wfqxx
  • 2009-06-02 11:59:00
  • 5647

C++各种数据类型之间的转换

在笔者在做windows开发的初期,各种数据类型的转换着实让笔者头痛不已,一些函数只需要特定类型的形参,而我们“手头”的参数又是各种其他类型,着实egg疼: 在做了一段时间开发过后,笔者特此总结...
  • huashuolin001
  • huashuolin001
  • 2016-04-24 18:19:35
  • 371

c/c++与c#的类型转换

Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR ...
  • u010512579
  • u010512579
  • 2015-04-28 11:16:39
  • 3726
    个人资料
    持之以恒
    等级:
    访问量: 79万+
    积分: 3746
    排名: 1万+
    最新评论