Qt类型转换用法总结

1、char * 与 const char *的转换 
char *ch1="hello11";
const char *ch2="hello22";
ch2 = ch1;    //char * 转换为const char *;不报错,但有警告
ch1 = (char *)ch2;   //const char * 转换为char *;
  
 2、char 与 QString的转换
//char 转换为 QString:
char a='b';
QString str;
str=QString(a);
//QString 转换为 char
QString str="abc";
char *ch;
QByteArray ba = str.toLatin1()
ch = ba.data();
注意:在调用QByteArray.data()之前,必须要先显示储存这个bytearray。像这样const char *ch = str.toLatin1().data();会使程序崩溃,因为QByteArray没有被储存,调用data()前是不存在的,必须先显式调用一次toLatin1(),再调用data()。
3、QByteArray 与 char* 的转换 
//QByteArray 转换为 char *
char *ch;//不要定义成ch[n];
QByteArray byte;
ch = byte.data();
//char * 转换为 QByteArray
char *ch;
QByteArray byte;
byte = QByteArray(ch);
4、QString 与 QByteArray 的转换
//QString转换为QByteArray
QByteArray byte;
QString string;
byte = string.toAscii();
//QByteArray 转换为 QString
QByteArray byte;
QString string;
string = QString(byte);
这里再对这俩中类型的输出总结一下:
qDebug()<<"print";
qDebug()<<tr("print");
qDebug()<<ch;(ch 为char类型)
qDebug()<<tr(ch);
qDebug()<<byteArray;(byteArray是QByteArray类型)
qDebug()<<tr(byteArray);
qDebug()<<str;(str 为Qstring类型)
但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下:
qDebug()<<tr(str.toLatin1);
5 、int与 QString 的转换
//int 转 QString
int a=10;
QString b;
b=QString::number(a)
//QString 转int
QString a="120"
int b;
b=a.toInt()
6、QString与string的转换
//QString 转 string
QString.toStdString();
//string 转 QString
QString::fromStdString(string)
//const string 转QString
QString s2q(const string &s)  
{  
    return QString(QString::fromLocal8Bit(s.c_str()));  
}  
//string 转const QString
string q2s(const QString &s)  
{  
    return string((const char *)s.toLocal8Bit());  
}
7、QString与其他类型的转换
//QString 转int,double,char *
QString::toInt()
QString::toDouble()
QString.toStdString().c_str();
8、 int、 double、 char* 转string
//可以采用<sstream>里的stringstream, 以int 为例,int a = 3;
stringstream ss;
string strInt;
ss<<a;
ss>>strInt;
 9、QString与QDateTime的转换
    //QDateTime转QString  
    public QDateTime qdate = QDateTime.currentDateTime();  
    datetime = qdate.toString("yyyy年MM月dd日ddddhh:mm:ss");   //2023年11月-17日Monday16:48:55  
      
    //QString转换成QDateTime  
    QDateTime dateTime2 = QDateTime::fromString("M1d1y9800:01:02",  
                                                 "'M'M'd'd'y'yyhh:mm:ss");  
 10、QString 与char*的转换
    Qstring 转换char*问题!  
    方法一:  
    QString qstr("hello,word");  
    const char * p = qstr.toLocal8Bit().data();  
    方法二:  
    const char *p = qstr.toStdString().data();  
    //转换过来的是常量  
    方法三:  
    QString str="abc";  
    char *ch;  
    QByteArray ba = str.toLatin1()  
    ch = ba.data();  
或者
    QString tmp = "test";
    QByteArray text = tmp.toLocal8Bit();
    char *data = new char[text.size() + 1]
    strcpy(data, text.data());
    delete [] data; 
11. QT编程中windows下的char*,wchar_t*与QString之间的相互转换
QString fileName("我是中文abc!");
//QString to char * (general case): 
const char * tmp = str.toUtf8().constData(); 
//wchar_t* to QString
wchar_t szMsg[100] = {0};
_stprintf(szMsg,L"Connect [%s] failed!",ssid);
QString str1= QString::fromWCharArray(szMsg);
//char* to QString
QStirng str2(tr("char* 转 QString."));
//QString to wchar_t: 
const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileName.utf16()); 
/*QString to wchar_t:  QString::toWCharArray方法说明
QString::toWCharArray方法用于将QString类型转换成wchar_t类型的数组,但是转换后数组末尾不会加上结束符 '\0',如果不加处理,在做其他操作时,例如将QString转换成char*后,转换的结果末尾会多出一些奇怪的字符。所以需要我们手动加上结束符 '\0'。
*/
QString str = "ceshi";
wchar_t *pWideChar = new wchar_t[str.size()+1];
int actualLen = str.toWCharArray(pWideChar);
// 加结束符'\0'
pWideChar[actualLen] = '\0';
// 转换char*操作
12. char 转 number
int  char2num( char  ch)  
{  
     if(ch>= '0'&&ch<= '9') return ch- '0';  
     else  if(ch>= 'a'&&ch<= 'f') return ch- 'a'+10;  
     return -1;  

}  

13. number to QString
QString::number(number,10);//10表示的是进制,如是16进制,则改为16.
14.uint8_t to QString
uint8_t Message_Digest;   
QString::number(Message_Digest,16);  
15. BYTE* to char[] to QString
QString textshow = NULL;  
BYTE * output = new BYTE[1024];  
for(int i=0; i<16; i++)  
{  
    char pBuff[2];  
    sprintf(pBuff,"%02x",output[i]);  
    textshow = textshow + pBuff;  
}  
16.string to BYTE []  //其中#define unsigned char  BYTE
//将字符串类型转换为BYTE数组   
void CryptClient::HexStrToByte(string str_arr, BYTE byte_arr[24])  
{  
    unsigned char ch1;  
    unsigned char ch2;  
    int k = 0;  
    for (int i=0; i<str_arr.length()-1; i = i+2)  
    {  
        ch1 = str_arr.at(i);  
        ch2 = str_arr.at(i+1);  
        if (ch1>=48 && ch1 <= 57)  
        {  
            ch1 &= 0x0F;  
        }  
        if (ch1>='A' && ch1 <='F')  
        {  
            ch1 &= 0x0F;  
            ch1 += 0x09;  
        }  
        if (ch2 >= 48 && ch2 <= 57)  
        {  
            ch2 &= 0x0F;  
        }  
        if (ch2>='A' && ch2 <='F')  
        {  
            ch2 &= 0x0F;  
            ch2 += 0x09;  
        }  
        ch1<<=4;  
        byte_arr[k] = ch1 + ch2;//int类型转byte类型,有问题   
        k++;  
    }  
}  
17.BYTE[] to string
//将BYTE数组转换为字符串类型   
string* byteToHexStr(BYTE byte_arr[], int arr_len)  
{  
    string* hexstr = new string;  
    for(int i=0; i<arr_len; i++)  
    {  
        char hex1;  
        char hex2;  
        int value = byte_arr[i];  
        int v1 = value/16;  
        int v2 = value % 16;  
        //将商转换为字母   
        if (v1>=0 && v1<=9)  
        {  
            hex1 = (char)(48 + v1);  
        }  
        else  
        {  
            hex1 = (char)(55 + v1);  
        }  
        //将余数转成字母   
        if (v2>=0 && v2<=9)  
        {  
            hex2 = (char)(48 + v2);  
        }  
        else  
        {  
            hex2 = (char)(55 + v2);  
        }  
        //将字母连成一串   
        *hexstr = *hexstr + hex1 + hex2;  
    }  
    return hexstr;  
}  
18. QByteArray 和 QString互相转换
//QByteArray 转 QString:
如果不考虑中文乱码问题:
QString str=QString(array);
考虑中文乱码问题:
QString byteArrayToUnicode(const QByteArray array){/
    // state用于保存转换状态,它的成员invalidChars,可用来判断是否转换成功
    // 如果转换成功,则值为0,如果值大于0,则说明转换失败
    QTextCodec::ConverterState state;
    // 先尝试使用utf-8的方式把QByteArray转换成QString
    QString text = QTextCodec::codecForName("UTF-8")->toUnicode(array.constData(), array.size(), &state);
    // 如果转换时无效字符数量大于0,说明编码格式不对
    if (state.invalidChars > 0)
    {
        // 再尝试使用GBK的方式进行转换,一般就能转换正确(当然也可能是其它格式,但比较少见了)
        text = QTextCodec::codecForName("GBK")->toUnicode(array);
    }
    return text;
}
//QString 转QByteArray:
//   array = str.toLatin1();//按ascii转换,如果有中文就不行
//  array=str.toUtf8();//按utf8转化
     array=str.toLocal8Bit();//经测试这个中文不会乱码
  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷凝女子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值