Table of contents
1. Several methods to apply for space:
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*
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*.