Qt中QString,int,char,QByteArray之间相互转换

Qt中QString,int,char,QByteArray之间相互转换

int  转 QString
int m=1;
QString b;
b=QString::number(m)

QString 转int
QString a="1111"
int b;
b=a.toInt()

char 转换为 QString
char a='b';
QString str;
str=QString(a);

QString 转换为 char
QString str="qq";
char *ch;
ch = str.toLatin1.data();

1.QStringchar *
先将QString转换为QByteArray,再将QByteArray转换为char *
注意:不能用下面的转换形式char *mm = str.toLatin1().data();。因为这样的话,str.toLatin1()得到的QByteArray类型结果就不能保存,最后转换,mm的值就为空。
 
2. char * QString
可以使用QString的构造函数进行转换:QString(const QLatin1String &str);
QLatin1String的构造函数:QLatin1String(const char *str);
则如下语句是将char * mm转换为QString str
str = QString(QLatin1String(mm));

char * 与 const char *的转换
char *ch1="tt";
const char *ch2="qq";
ch2 = ch1;//不报错,但有警告
ch1 = (char *)ch2;

QByteArray 转换为 char *
char *ch;//不要定义成ch[n];
QByteArray byte;
ch = byte.data();

char * 转换为  QByteArray
char *ch;
QByteArray byte;
byte = QByteArray(ch);

QString 转换为  QByteArray
QByteArray byte;
QString string;
byte = string.toAscii();

QString s("hello");
QByteArray cstr = s.toAscii();
QString s("hello");
QByteArray cstr = s.toLatin1();

QByteArray 转换为  QString
QByteArray byte;
QString string;
string = QString(byte);
示例:
qDebug()<<"qq";
qDebug()<<tr("tt");
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);
QString 转换为 string
QString s2q(const string &s)
{
     return QString(QString::fromLocal8Bit(s.c_str()));
}

string q2s(const QString &s)
{
     return string((const char *)s.toLocal8Bit());
}

1. 将QString类型转化为float类型,很简单

QString data;
float num = data.toFloat();

    即可很轻松的实现。
2. 但是如何将float类型转化为QString类型呢?
    查看API很难发现封装好的转化函数
    可以尝试使用下面的代码转化:
float num = 1.222;
QString data = QString("float is %1").arg(num);

    输出结果是:float is 1.222

    如果只要float转化成的数值,则使用如下:

    QString data = QString("%1").arg(num);

Hex转QString
方法一:
QString key;
key =  QString("%1").arg(k,4,16,QLatin1Char('0'));//k为int型或char型都可

方法二:
char chBuf[20];
sprintf(chBuf,"%02x",k);
key = QString::fromUtf8(chBuf);
或 key = QString(QLatin1String(chBuf));

不用补0将10进制转成16进制字符串
key = QString::number(k, 16);

Qstring 转换char*问题
QString qstr("hello,word");
const char * p = qstr.toLocal8Bit().data();
const char *p = qstr.toStdString().data();

QString 转 Hex
char ConvertHexChar(char ch)
{
    if((ch >= '0') && (ch <= '9'))
        return ch-0x30;
    else if((ch >= 'A') && (ch <= 'F'))
        return ch-'A'+10;
    else if((ch >= 'a') && (ch <= 'f'))
        return ch-'a'+10;
    else return (-1);
}

void String2Hex(QString str, QByteArray &senddata)
{
    int hexdata,lowhexdata;
    int hexdatalen = 0;
    int len = str.length();
    senddata.resize(len/2);
    char lstr,hstr;
    for(int i=0; i<len; )
    {
        //char lstr,
        hstr=str[i].toLatin1();
        i++;
        if(hstr == ' ')
        {
            continue;
        }
        if(i > len)
            break;
        lstr = str[i].toLatin1();
        hexdata = ConvertHexChar(hstr);
        lowhexdata = ConvertHexChar(lstr);
        if((hexdata == 16) || (lowhexdata == 16))
            break;
        else if(lowhexdata == -1)
            hexdata = hexdata;
        else
            hexdata = hexdata*16+lowhexdata;
        i++;
        senddata[hexdatalen] = (char)hexdata;
        hexdatalen++;
    }
    senddata.resize(hexdatalen);
}
### QString 与 unsigned char转换操作 在 Qt 中,`QString` 和 `unsigned char` 之间转换是一个常见的需求,尤其是在处理二进制数据或需要与 C 风格字符串交互时。以下是详细的转换方法和示例代码。 #### 1. **QString unsigned char*** 将 `QString` 转换为 `unsigned char*` 可以通过以下步骤实现: - 将 `QString` 转换为 `QByteArray`。 - 使用 `QByteArray::data()` 或 `QByteArray::constData()` 获取底层的 `char*` 或 `const char*`。 - 最后将 `char*` 转换为 `unsigned char*`。 示例代码如下: ```cpp QString str = "example"; QByteArray byteArray = str.toUtf8(); // 将 QString 转换QByteArray unsigned char *ucharPtr = reinterpret_cast<unsigned char*>(byteArray.data()); // 转换为 unsigned char* ``` 这种方法适用于需要将 `QString` 数据传递给需要 `unsigned char*` 参数的函数[^1]。 #### 2. **unsigned char* QString** 将 `unsigned char*` 转换为 `QString` 有多种方法,具体取决于数据的内容和编码方式。以下是几种常见方法: - **直接转换**:如果 `unsigned char*` 包含的是文本数据(如 ASCII 或 UTF-8 编码),可以直接使用 `QLatin1String` 或 `QString::fromUtf8` 进行转换。 示例代码: ```cpp unsigned char ucharArr[] = {'H', 'e', 'l', 'l', 'o', '\0'}; QString str = QString::fromLatin1(reinterpret_cast<char*>(ucharArr)); // 使用 fromLatin1 ``` - **通过 QByteArray**:如果需要更灵活的控制,可以先将 `unsigned char*` 转换为 `QByteArray`,然后再转换为 `QString`。 示例代码: ```cpp unsigned char ucharArr[] = {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00}; // Hello QByteArray byteArray(reinterpret_cast<char*>(ucharArr), sizeof(ucharArr) - 1); QString str = QString::fromUtf8(byteArray); // 使用 fromUtf8 ``` - **十六进制表示**:如果 `unsigned char*` 表示的是二进制数据,可以通过逐字节转换为十六进制字符串。 示例代码: ```cpp QString ucharToHexString(const unsigned char *data, int len) { QString result; for (int i = 0; i < len; ++i) { result.append(QString("%1").arg(data[i], 2, 16, QLatin1Char('0'))); } return result; } unsigned char data[] = {0x0A, 0x10, 0xFF}; QString hexStr = ucharToHexString(data, sizeof(data) / sizeof(unsigned char)); ``` 这种方法适用于需要将二进制数据表示为可读字符串的情况[^4]。 #### 3. **注意事项** - 在进行类型转换时,必须确保数据的编码方式正确。例如,如果数据是 UTF-8 编码,则应使用 `QString::fromUtf8`;如果是 Latin-1 编码,则应使用 `QString::fromLatin1`。 - 使用 `reinterpret_cast` 时需谨慎,确保指针类型兼容且不会导致未定义行为。 - 如果数据包含二进制内容(非文本),则需要明确如何表示这些数据(如十六进制字符串)[^3]。 --- ### 示例总结 以下是完整的示例代码,展示 `QString` 和 `unsigned char*` 的相互转换: ```cpp #include <QString> #include <QByteArray> #include <QDebug> // unsigned char* QString QString ucharToString(const unsigned char *data, int len) { QByteArray byteArray(reinterpret_cast<const char*>(data), len); return QString::fromUtf8(byteArray); } // QString unsigned char* unsigned char* stringToUchar(const QString &str) { QByteArray byteArray = str.toUtf8(); return reinterpret_cast<unsigned char*>(byteArray.data()); } int main() { // unsigned char* QString unsigned char ucharArr[] = {'H', 'e', 'l', 'l', 'o', '\0'}; QString str = ucharToString(ucharArr, sizeof(ucharArr) - 1); qDebug() << "unsigned char* to QString:" << str; // QString unsigned char* QString qstr = "World"; unsigned char *ucharPtr = stringToUchar(qstr); qDebug() << "QString to unsigned char*:" << reinterpret_cast<char*>(ucharPtr); return 0; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值