目录
一、申请空间的几种方法:
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*
三、总结方法:
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;
}
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 类型的指针强制转换为 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);
}
(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);
}
(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*麻烦。
4、char* 作为string 转char[ ]的中转站;
5、string 作为 QString 转 char *的中转站。