字符串之间的转换(char*、const char*、char[]、string、QString、QByteArray、int、double)

目录

一、申请空间的几种方法:

1、C语言

2、C++

二、各个字符串的转换

 1、char*  与 unsigned char*、char* 与 const char*、char* 与 char[ ]

2、string 与 char*、string 与 unsigned char*、string 与 QString、string 与 int、double

3、QString 与 int 、double、QString 与 char*

三、总结方法:


一、申请空间的几种方法:

1、C语言

void exemple
{
    // 申请空间
    int len = 1024;
    char* pszData = NULL;
    if(pszData = (char *)malloc(sizeof(len)))
    {
       printf("申请空间失败!");
    }

    // 初始化申请的空间
    //C 库函数 void *memset(void *str, int c, size_t n) 
    //复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
    memset(pszData, 0, len);

    // 释放内存,防止内存泄漏
    free pszData;
    pszData = NULL;
}

2、C++

void exemple
{
    // 申请空间
    int len = 1024;
    char* pszData = new char[len];
    if(pszData == NULL)
    {
       printf("申请空间失败!");
    }

    // 释放内存,防止内存泄漏
    delete[] pszData;//申请时候有长度,就是delete[],单个指针就是delete
    pszData = NULL;
}

二、各个字符串的转换

 1、char*  与 unsigned char*、char* 与 const char*、char* 与 char[ ]

(1)char*  与 unsigned char*

思路:需要将 char 类型的指针强制转换为 void* 类型的指针;

           再强制转换为 unsigned char* 类型的指针,这样访问内存不会出错;

void char2unsignedChar()
{
    //(1) char* 转unsigned char*
	char* charPtr;
	unsigned char* ucharPtr;
	void* voidPtr = static_cast(charPtr);
	ucharPtr = static_cast(voidPtr);

    //(2) unsigned char* 转 char*
    // C++
    unsigned char* ucharPtr;
    char* charPtr = reinterpret_cast(ucharPtr);
    
    //C
    unsigned char* ucharPtr;
    char* charPtr = (char*)(ucharPtr);
}

(2)char* 与 const char*

void char2constchar
{
    // const char* 转 char*
    char* ch = (const char* chConst);

    // char* 转 const char*
    const char* chConst = char* ch;
}

(3)char* 与 char[ ]

void char2charArray
{
    // char[] 转 char *
    char[20] chArray = {0};
    char* pszCh = chArray;

    // char * 转 char[]
    char* pszCh = "Hello World!"; 
    char[12] chArray = [0];
    strncpy_s(chArray, pszCh, 12);
}

2、string 与 char*、string 与 unsigned char*、string 与 QString、string 与 int、double

(1)string 与 char*

void string2Char()
{
	//string转char*
	string str = "hello";
	char* ch = str.c_str;

	//char*转string 
	//C
	char* ch = "hello";
	std::string str(ch);

	//C++
	char* ch = "hello";
	std::string str = ch;
}

(2)string 与 unsigned char*

思路:string先抓到char*,char*再转到unsigned char*

void string2UnsignedChar()
{
	//string转unsigned char*
	string str = "hello";
	unsigned char *uc1 = (unsigned char *)str.c_str();//强转
    unsigned char *uc2 = static_cast(str.c_str());//安全转换

	//unsigned char*转string
	string str = std::string(char*)ch;
}

(3)string 与 QString

void string2QString()
{
	//1、QString转换String
	string s = qstr.toStdString();

	//2、String转换QString
	QString qstr2 = QString::fromStdString(s);
}

(4)string 与 int、double

void int2String()
{
	//int转string
	int num = 123;
	std::string str = std::to_string(num);

	//double转stirng
	double d = 3.14159;
	std::string str = std::to_string(d);

/**********************************************************************************/

	//string转int
	char str[] = "123";
	int num = atoi(str);  
	printf("The integer is %d\n", num);

	//string转double
	char str[] = "3.14";
	double num = atof(str);
	printf("num = %lf\n", num);
}

3、QString 与 int 、double、QString 与 char*

(1)QString 与 int 、double

void int2QString()
{
    // int转Qstring 、 double转QString
    //QString::number()这个静态函数,参数可以是int,也可以是double。
	int num = 123;
	QString str = QString::number(num);

    // QString 转 int 、double
    QString str = "123.5";
    int num = QString::toInt(str);
    double d = QString::toDouble(str)
}

(2)QString 与 char*

思路:QString 要先转为 string,再由string 转为char*

void char2QString()
{
    // char* 转 QString
    char* pszData = "hello";
	std::string str(pszData );
    QString qstr = QString::fromStdString(str);
    

    // QString 转 char *
    QString qstr = "hello";
    char* pszData = qstr.toStdString().c_str();
}

三、总结方法:

1、char* 变成string,直接赋值;

2、char[ ]变成别的,直接赋值。

3、char*变const char*容易(直接复制),const char*变char*麻烦。(const char*);

4、char* 作为string 转char[ ]的中转站;

5、string 作为 QString 转 char *的中转站。

你可能感兴趣的:(C/C++,算法,c++)