Qt进制转换,16进制转long ABCD/CDAB

Qt进制转换,16进制转long ABCD/CDAB

long hexToABCD(const QString &hexData) // 16进制转long ABCD,大端
{
    bool ok;
    char data[4];
    data[0] = hexData.left(2).toInt(&ok, 16);
    data[1] = hexData.mid(2, 2).toInt(&ok, 16);
    data[2] = hexData.mid(4, 2).toInt(&ok, 16);
    data[3] = hexData.right(2).toInt(&ok, 16);

    long value = 0;
    QByteArray bytedata;
    bytedata.setRawData((char *)&value, 4);
    char *temp = (char *)&value;
    temp[0] = data[3];
    temp[1] = data[2];
    temp[2] = data[1];
    temp[3] = data[0];
    return value;
}

long hexToCDAB(const QString &hexData) // 16进制转long CDAB,小端
{
    bool ok;
    char data[4];
    data[0] = hexData.left(2).toInt(&ok, 16);
    data[1] = hexData.mid(2, 2).toInt(&ok, 16);
    data[2] = hexData.mid(4, 2).toInt(&ok, 16);
    data[3] = hexData.right(2).toInt(&ok, 16);

    long value = 0;
    QByteArray bytedata;
    bytedata.setRawData((char *)&value, 4);
    char *temp = (char *)&value;
    temp[0] = data[1];
    temp[1] = data[0];
    temp[2] = data[3];
    temp[3] = data[2];
    return value;
}

long hexToBADC(const QString &hexData)
{
    bool ok;
    char data[4];
    data[0] = hexData.left(2).toInt(&ok, 16);
    data[1] = hexData.mid(2, 2).toInt(&ok, 16);
    data[2] = hexData.mid(4, 2).toInt(&ok, 16);
    data[3] = hexData.right(2).toInt(&ok, 16);

    long value = 0;
    QByteArray bytedata;
    bytedata.setRawData((char *)&value, 4);
    char *temp = (char *)&value;
    temp[0] = data[2];
    temp[1] = data[3];
    temp[2] = data[0];
    temp[3] = data[1];
    return value;
}

long hexToDCBA(const QString &hexData)
{
    bool ok;
    char data[4];
    data[0] = hexData.left(2).toInt(&ok, 16);
    data[1] = hexData.mid(2, 2).toInt(&ok, 16);
    data[2] = hexData.mid(4, 2).toInt(&ok, 16);
    data[3] = hexData.right(2).toInt(&ok, 16);

    long value = 0;
    QByteArray bytedata;
    bytedata.setRawData((char *)&value, 4);
    char *temp = (char *)&value;
    temp[0] = data[0];
    temp[1] = data[1];
    temp[2] = data[2];
    temp[3] = data[3];
    return value;
}

int main(int argc, char *argv[])
{
    long v1 = hexToABCD("6387fffd"); //输出1669857277
    long v2 = hexToCDAB("6387fffd"); //输出-171129
    return 0;
}

Qt中double与float与16进制字符串之间的转换

https://blog.csdn.net/SiriusWilliam/article/details/117483663

// float转16进制字符串
float f = 20.321;
uint f_uint = *(uint*)&f;
QString f_hex = QString("%1").arg(f_uint, 4, 16, QLatin1Char('0'));    // 4是生成字符串的最小长度,可以改为8
qDebug() << f_hex;    // "41a29168"

// 16进制字符串转float
QString hex_float = "41a29168";
uint hex_uint = hex_float.toUInt(nullptr, 16);
float hex_res = *(float*)&hex_uint;
qDebug() << hex_res;    // 20.321

// double转16进制字符串
double d = 20.321;
qulonglong d_long = *(qulonglong*)&d;
QString d_hex = QString("%1").arg(d_long, 8, 16, QLatin1Char('0'));
qDebug() << d_hex;    // "4034522d0e560419"

// 16进制字符串转double
QString hex_double = "4034522d0e560419";
qulonglong hex_long = hex_double.toULongLong(nullptr, 16);
double hex_d = *(double*)&hex_long;
qDebug() << hex_d;    // 20.321

C语言:十六进制(HEX)和浮点类型(float、double)转换

https://handsome-man.blog.csdn.net/article/details/107333529

Guess you like

Origin blog.csdn.net/libaineu2004/article/details/128903982