目录
一、申请空间的几种方法:
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[],单个指针就是deletepszData = 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<void*>(charPtr);ucharPtr = static_cast<unsigned char*>(voidPtr);//(2) unsigned char* 转 char*// C++unsigned char* ucharPtr;char* charPtr = reinterpret_cast<char*>(ucharPtr);//Cunsigned char* ucharPtr;char* charPtr = (char*)(ucharPtr);
}
(2)char* 与 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* 与 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 //Cchar* 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<unsigned char*>(str.c_str());//安全转换//unsigned char*转stringstring str = std::string(char*)ch;
}
(3)string 与 QString
void string2QString()
{//1、QString转换Stringstring s = qstr.toStdString();//2、String转换QStringQString qstr2 = QString::fromStdString(s);
}
(4)string 与 int、double
void int2String()
{//int转stringint num = 123;std::string str = std::to_string(num);//double转stirngdouble d = 3.14159;std::string str = std::to_string(d);/**********************************************************************************///string转intchar str[] = "123";int num = atoi(str); printf("The integer is %d\n", num);//string转doublechar 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 、doubleQString str = "123.5";int num = QString::toInt(str);double d = QString::toDouble(str)
}
(2)QString 与 char*
思路:QString 要先转为 string,再由string 转为char*
void char2QString()
{// char* 转 QStringchar* 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_cast><char*>(const char*);
4、char* 作为string 转char[ ]的中转站;
5、string 作为 QString 转 char *的中转站。