QString ----->wchar_t* && wchar_t* -----> QString
QString szPath = "123456"; // wchar_t 为宽字符类型,一个字符占两个字节 ,unsigned short无符号短整型,一个整形占两个字节
(1)const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(szPath.utf16());
(2)const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(szPath.data());
szPath = QString::fromWCharArray(encodedName);
const char* ------>QString && QString ------> char*
const char* p ="123,你好"; //在window下VS中一个中文字符占两个字节,Qt下一个中文占三个字节
QString str;
(1)str = QString(p);
(2)str = QString::fromUtf8(p);
(3)str = QString("%1").arg(p);
p = str.toUtf8().data();
QChar----->QString
QString str ="我是好人"
QChar ch = str[1];
QString ch = QString(ch) //QChar 是QString中每个字符的基本单位,一个QChar占两个字节
wchar_t ----->QChar && QChar----->wchar_t
wchar_t ch1 = L'我';
QChar ch2 = L'你';
ch2 = ch1;
ch1 = ch2.unicode(); //无符号整型ushort可以和wchar_t直接赋值
char------> QChar && QChar------>char
char ch = 'A';
QChar ch1 = ch;
ch = ch1.toLatin1(); //中文字符时此方法无效,中文字符的长度大于一个字节
char----->wchar_t && wchar_t----->char //char 的值小于256,超范围赋值会报错
char ch ='C';
wchar_t ch1 = ch;
char ch2= ch1;
QString----->string && string ------>QString
QString str = "我是好人";
string tr = str.toStdString();
str = QString::fromStdString(tr);
char * ----->string && string -----> char *
const char* p ="qwewewe";
string str = p;
p = str.c_str();
string ----->int && int ----->string
string sss = "1234";
int i = atoi(sss.c_str());
string ccc = to_string(i+2);
wchar_t*------->char* && char*------->wchar_t*
wchar_t commod[] = L"format Z: /fs:fat32 /Q /Y";
size_t convertedChars = 0;
size_t dByteNum = sizeof(commod) / sizeof(wchar_t) + 1;
char* dest = new char[dByteNum];
wcstombs_s(&convertedChars, dest, dByteNum, commod, _TRUNCATE); //返回值为0时表示转换成功,不可用中英混合字符串格式化
(1)
char p[] = "hello";
size_t dByteNum = sizeof(p) / sizeof(char) + 1;
wchar_t *temp2 = new wchar_t[dByteNum];
swprintf(temp2,dByteNum,L"%s",p); //%d %c 亦可用于其它基本类型的转换,不可用中英混合字符串格式化,%s在VS2013中可能存在问题
(2)
char commod[] = "format Z: /fs:fat32 /Q /Y";
size_t convertedChars = 0;
size_t dByteNum = sizeof(commod) / sizeof(char) + 1;
wchar_t* dest = new wchar_t[dByteNum];
mbstowcs_s(&convertedChars, dest, dByteNum, commod, _TRUNCATE); //不可用中英混合字符串格式化
wchar_t* ----->CString && CString------>wchar_t*
wchar_t temp[] = L"我是";
CString str = temp;
CString cstr = L"我是好人"; //初始化时需要使用L宠或_T()或TEXT(),后续赋值可以不用加
wchar_t * p = cstr.GetBuffer();
CString---->string && string------->CString
CString cstrTest = _T("test");
string strTest = CT2A(cstrTest.GetString());
string strTest="test";
CString cstrTest = CA2T(strTest.c_str());
CString------>int && int------->CString
CString str= L"12345";
int i = _ttoi(m_part1_size);
str.Format (str + _T("%d"), i);
CString----->char* && char* -------->CString
USES_CONVERSION;
char * pFileName = "D:校内项目";
(1)CString s = A2T(pFileName);
(2)CString s = A2W(pFileName);
CString str = _T("D:校内项目1");
(1)char * pFileName = T2A(str);
(2)char * pFileName = W2A(str); //也可实现转换
TCHAE、wchar_t 、WCHAR //均为宽字符类型,中间可以相互赋值
TCHAE*、wchar_t* 、WCHAR* //均为宽字符类型指针,中间可以相互赋值
//控制台输出中文乱码时的一处解决方法
#include <stdio.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "chs");
wchar_t wc = L'中';
wprintf(L"%c\n",wc);
return 0;
}
//关于常见的中文乱码问题
1.控制台输出:凡从文件中读取的应将文件编码格式选择为ANSI gbk编码,在程序中直接赋值的应将当前源文件保存格式同样选择ANSI gbk编码
2.非控制台输出:如第三方字符串格式化输出,一般来说第三方采用的编码格式通常为utf-8,所以此时把本地源文件的保存格式修改为同样的utf-8即可,需要注意的时utf-8分为有无bom,标准是没有的,在window下有时会出现这种问题
3.在UTF-8中,一个汉字占3个字节(一个字符占一个字节)
4.在ASCII码中,一个汉字占2个字节(一个字符占一个字节)
5.在qt中默认文件的编码格式为utf-8,在vs中默认的为ansi gbk,qt中可以通过(工具-》选项-》文本编辑器-》行为-》文件编码)以上步骤进行修改,vs中可通过(文件-》高级保存选项)上述步骤进行修改
来源:oschina
链接:https://my.oschina.net/urlove/blog/4292967