Qt 常用的字符转换,QString如何转换成const char类型, 转 PWCHAR wchar_t*

本文详细介绍Qt中QString与其他字符类型如const char*, wchar_t*, UCHAR的转换方法,包括使用toStdString().c_str()将QString转换为const char*,利用toWCharArray进行QString与wchar_t*之间的互转,以及UCHAR到QString的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的字符转换(日常记录…)

  1. QString如何转换成const char类型
    const char *cmd_data = qstring.toStdString().c_str(); //qstring为待转换的qstring类型字符串
QString format_cmd = u_format_exe_path + " " + mCurrentDisk_name + ":\n\r";
qDebug() << __FUNCTION__ << __LINE__ <<  "format_cmd:" << format_cmd;
const char *cmd_data = format_cmd.toStdString().c_str();
qDebug() << __FUNCTION__ << __LINE__ <<  "cmd_data:" << cmd_data;
    //生成crc32...crc: 4BC8EBB1.....................s
    //将crc32转化为unsigned char类型,比如字符串123a5c,转成0x12,0x3a,0x5c
    unsigned char crc32_buf[4];
    memset(crc32_buf,0x0, 4);
    const char *crc32_tmp_ch = crc32.toStdString().data();
    char crc32_tmp_buf[4*2];
    memset(crc32_tmp_buf,0x0,sizeof (crc32_tmp_buf));
    memcpy(crc32_tmp_buf,crc32_tmp_ch,4*2);//crc32_tmp_buf 存的是4BC8EBB1,按字符存,所以是4的2倍
    //将十六进制字符串转成十六进制,如:字符串2ace9f0f577ebf674d2de1353cb7412c1a663515398f8638e5de262c1e09d31e,转成0x2a 0xce 0x9f 0x0f...
    int n = glb_common_interface::hexstring_to_hex(crc32_tmp_buf, crc32_buf);

    for(int j=0; j<4; j++)
    {
//        printf("crc32_buf[%2d] : %2x  ", j, crc32_buf[j]);
        qDebug("crc32_buf[%2d] : %2x ", j,  crc32_buf[j]);
        if ((j + 1) % 4 == 0)
        {
            printf("\r\n");
        }
    }
  1. QString 转化 PWCHAR wchar_t*
 PWCHAR格式可以看到定义为
 
 typedef WCHAR *PWCHAR,*LPWCH,*PWCH;
 typedef wchar_t WCHAR;
  
 PWCHAR实际上就是 wchar_t* 
  
  • 方法一
    测试过可用
QString spi_path = filepath;
PWCHAR strSpiPath=new wchar_t[MAX_PATH];  //#define MAX_PATH 260  MAX_PATH是在minwindef.h中定义的
int s1=spi_path.toWCharArray(strSpiPath);
strSpiPath[s1]=0;

其中toWCharArray
QString::toWCharArray(wchar_t * array)
QT官方文档确实注明了:Note: This function does not append a null character to the array.

qstring.h
toWCharArray的返回值,我的理解貌似是字符串strSpiPath的长度的值,然后strSpiPath[s1]=0;是把最后一个位置设成0,类似于字符串拷贝到字符数组里面,要在其后面添加一个\0标识符似的。

qstring.h

inline int QString::toWCharArray(wchar_t *array) const
{
    if (sizeof(wchar_t) == sizeof(QChar)) {
        memcpy(array, d->data(), sizeof(QChar) * size());
        return size();
    } else {
        return toUcs4_helper(d->data(), size(), reinterpret_cast<uint *>(array));
    }
}

相对应的wchar类型的转换为qstring,用这个fromWCharArray

  • 方法二
    未测试过,贴出来供参考
PWCHAR strSpiPath;
QString spi_path = filepath;
qDebug()<< __FILE__ << __FUNCTION__ << __LINE__ << "spi_path:" << spi_path;
wchar_t *spi_path_w_char= const_cast<wchar_t *>(spi_path.toStdWString().c_str());
strSpiPath = spi_path_w_char;

//wchar_t 转Qstring
QString str_test= QString::fromWCharArray(strSpiPath);
  1. UCHAR 如何转换成QString 类型

QString u_sn = QString::fromUtf8(reinterpret_cast<char *>(sn_buf), 16);

        UCHAR sn_buf[32];
        memset(sn_buf,0x0,sizeof (sn_buf));
        int ret_sn =   GetSN( hDev, sn_buf,  16);
        QString u_sn;
        if(ret_sn == 1)
        {
            QString u_sn = QString::fromUtf8(reinterpret_cast<char *>(sn_buf), 16);
        }
        else
        {
            u_sn.clear();
        }

十进制转十六进制qstring

            QString xor_str_hex = QString("%1").arg(xor_int, 2, 16, QChar('0'));  // 保留2位,转换为16进制,不足补0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值