常用的字符转换(日常记录…)
-
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");
}
}
-
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);
- 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