Conversion between strings (char*, const char*, char[], string, QString, QByteArray, int, double)

Table of contents

1. Several methods to apply for space:

1. C language

2、C++

2. Conversion of each string

 1. char* and unsigned char*, char* and const char*, char* and char[]

2. string and char*, string and unsigned char*, string and QString, string and int, double

3. QString and int, double, QString and char*

3. Summary method:


1. Several methods to apply for space:

1. C language

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;
}

2. Conversion of each string

 1. char* and unsigned char*, char* and const char*, char* and char[]

(1) char* and unsigned char*

Idea: A pointer of type char needs to be coerced into a pointer of type void*;

           Then cast it to a pointer of unsigned char* type, so that there will be no error when accessing the memory;

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

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

(2) char* and const char*

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

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

(3) char* and 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 and char*, string and unsigned char*, string and QString, string and int, double

(1) string and 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*

Idea: string captures char* first, then char* is transferred to unsigned char*

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

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

(3) string and 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 and int, double, QString and char*

(1) QString and 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 and char*

Idea: QString must be converted to string first, and then converted from string to 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();
}

3. Summary method:

1. char* becomes string and assigned directly;

2. Change char[] into something else and assign it directly.

3. It is easy to change char* into const char* (direct copy), but it is troublesome to change const char* into char*. <const_cast><char*>(const char*);

4. char* serves as a transfer station for converting string to char[];

5. String serves as a transfer station for converting QString to char*.

Guess you like

Origin blog.csdn.net/bigger_belief/article/details/132872091