1、char[]/char* 转 string
(1) string类型头文件 和 变量声明:
#include <string>
std::string str = "abdccc";
(2)string初始化 方式
#include <string>
char cstr[256] = "abcdefg";
std::string str(cstr); (初始化时 char[]/char* 转string)
(3)string 一般赋值 方式
#include <string>
char cstr[256] = "abcdefg";
std::string str;
str = cstr; (一般赋值 char[]/char* 转string)
(4)string 内存拷贝的方式
std::string str;
char strTest[256] = "abc123!!\n00\n";
memcpy(str.c_str(), strTest, 256); //错误, 错误信息“ “const char*” 类型的实参, 与“void*” 类型的形参 不兼容”
2、char[]/char* 转 CString
(1) CString类型头文件 和 变量声明:
#include "pch.h" 或 #include "stdafx.h" (根据编译器版本确定)
CString Cstr = _T("abc");
(2)CString初始化 方式
#include "pch.h"
char cstr[256] = "abcdefg";
CString Cstr(cstr); (初始化时 char[]/char* 转CString)
(3)CString 一般赋值 方式
#include "pch.h"
char cstr[256] = "abcdefg";
CString Cstr;
Cstr = cstr; (一般赋值 char[]/char* 转CString)
(4)CString 函数转换 方式
char buffTmp1[256];
char buffTmp2[256];
//case 1 is OK
WCHAR buffTmp11[256];
WCHAR buffTmp21[256];
CharToWCharConv(buffTmp1, buffTmp11);
CharToWCharConv(buffTmp2, buffTmp21);
//case 2 is OK
CString buffCStr1;
CString buffCStr2;
CharToWCharConv(buffTmp1, buffCStr1.GetBufferSetLength(256));
CharToWCharConv(buffTmp2, buffCStr2.GetBufferSetLength(256));
/************************************************************************
/* 函数名: CharToWCharConv
/* 功能描述: CharToWChar
/* 输入:LPSTR lpMultiByteStr: 存储数据的char数组
/* 输出:LPWSTR lpWideCharStr: 存储转换后的wchar数据指针
/* 返回值:0:正常, -1:空指针
************************************************************************/
int CharToWCharConv(LPSTR lpMultiByteStr, LPWSTR lpWideCharStr)
{
int re = 0;
if ((lpWideCharStr != NULL) && (lpMultiByteStr != NULL))
{
int len = MultiByteToWideChar(CP_ACP, 0, lpMultiByteStr, strlen(lpMultiByteStr), NULL, 0);
MultiByteToWideChar(CP_ACP, 0, lpMultiByteStr, strlen(lpMultiByteStr), lpWideCharStr, len);
lpWideCharStr[len] = '\0';
}
else
{
re = -1;
}
return re;
}
(5)CString 内存拷贝的方式
CString Cstr;
char strTest[256] = "abc123!!\n00\n";
memcpy(Cstr.GetBuffer(), strTest, 256); //正确
3、string 转 CString
(1)CString初始化 方式
char testabc[256] = "abc123!!\n00\n";
std::string str;
str = testabc;
CString CStr(str); //错误, 编译异常
CString CStr(str.c_str()); //正确, 本质上还是转换为cha* 进行CString
(2)CString 一般赋值 方式
char testabc[256] = "abc123!!\n00\n";
std::string str;
str = testabc;
CString CStr;
CStr = str; //错误, 编译异常
CStr = str.c_str();//正确, 本质上还是转换为cha* 进行CString
(3)CString 内存拷贝的方式
CString Cstr;
std::string str = "abc123!!\n00\n\n";
memcpy(Cstr.GetBuffer(), str.c_str(), 256);//正确
4、CString 转 string
(1)string初始化 方式
char testabc[256] = "abc123!!\n00\n";
CString CStr = testabc;
std::string str(CStr.GetBuffer()); //将CStr缓存中的字符数据全部赋值给str, str缓存数据为“abc123!!\n00\n”
std::string str1(CStr.GetBufferSetLength(3)); //将CStr缓存中的 前3 字符数据赋值给str, str缓存数据为“abc”
(2)string 一般赋值 方式
char testabc[256] = "abc123!!\n00\n";
std::string str;
CString CStr = testabc;
str = CStr.GetBuffer(); //将CStr缓存中的字符数据全部赋值给str, str缓存数据为“abc123!!\n00\n”
str = CStr.GetBufferSetLength(3); //将CStr缓存中的 前3 字符数据赋值给str, str缓存数据为“abc”
(3)string 内存拷贝的方式
CString Cstr = "abc123!!\n00\n\n";
std::string str;
memcpy(str.c_str(), Cstr.GetBuffer(), 256); //错误, 错误信息“ “const char*” 类型的实参, 与“void*” 类型的形参 不兼容”
5、CString 转 char[]/char*
(1)char[]/char* 初始化 方式
暂时未发现可以在初始化 将 CString转换为 char[]/char*;
(2)char[]/char* 内存拷贝的方式
CString CStr = "abc123!!\n00\n";
char strTest[256], strTest1[256];
memcpy(strTest, CStr.GetBuffer(), 256); //拷贝 全部 字符, strTest为"abc123!!\n00\n"
memcpy(strTest1, CStr.GetBufferSetLength(4), 256); //拷贝 前4 个字符, strTest1 为 "abc1"
(3)char[]/char* 函数转换 方式
char strTest[256];
CString CStr = "abc123"
WCharToCharConv(CStr, 256, strTest);
/************************************************************************
/* 函数名: WCharToCharConv
/* 功能描述: WCharToChar
/* 输入:LPCWCH lpWideCharStr: wchar字符类型数据指针
/* int lenArray: 存储转换后字符串的char数组大小
/* 输出:LPSTR lpMultiByteStr: 存储转换后数据的char数组
/* 返回值:0:正常, 2:空指针, 1: 字符串过长
************************************************************************/
int WCharToCharConv(LPCWCH lpWideCharStr, int lenArray, LPSTR lpMultiByteStr)
{
int re = 0;
if ((lpWideCharStr != NULL) && (lpMultiByteStr != NULL))
{
//计算 存储Wchar数据 所需的 char数组 长度
int len = WideCharToMultiByte(CP_ACP, 0, lpWideCharStr, wcslen(lpWideCharStr), NULL, 0, NULL, NULL);
//判断char数组长度是否足够大
if ((len + 1) > lenArray)
{
MessageBox(NULL, TEXT("wchar转char时, 用于存储的char数组过小, 请增大char数组大小"), TEXT("错误"), MB_ICONHAND | MB_OK);
re = 1;
}
else
{
WideCharToMultiByte(CP_ACP, 0, lpWideCharStr, wcslen(lpWideCharStr), lpMultiByteStr, len, NULL, NULL);
lpMultiByteStr[len] = '\0';
}
}
else
{
re = -1;
}
return re;
}
6、string 转 char[]/char*
(1)char[]/char* 初始化 方式
暂时未发现可以在初始化 将 string转换为 char[]/char*;
(2)char[]/char* 内存拷贝的方式
std::string str = "abc123!!\n00\n";
char strTest[256];
memcpy(strTest, str.c_str(), 256);