上位机校验数据参数转换问题

我现在要做一个上位机 给下位机发送数据需要用到uint8_t类型的数组 里面都是类似0x01这种int类型的以0x开头的十进制数,我现在只有QByteArray类型的数据我得怎么转换

img

img

结合chatgpt
要将QByteArray类型的数据转换为uint8_t类型的数组,您可以使用以下步骤进行转换:

  1. 将QByteArray转换为const char类型:使用QByteArray::constData()函数可以获取QByteArray的const char指针,表示二进制数据的首地址。

  2. 遍历const char数组,将每个元素转换为uint8_t类型:由于const char指针指向的是一个字节数组,您可以通过将每个元素强制类型转换为uint8_t类型,将其存储在一个新的uint8_t数组中。

下面是一个示例代码,演示如何进行转换:

#include <QByteArray>
#include <cstdint>

QByteArray byteArray = ...; // 要转换的QByteArray数据

const char* dataPtr = byteArray.constData();
int dataSize = byteArray.size();

uint8_t* uintArray = new uint8_t[dataSize];
for (int i = 0; i < dataSize; ++i) {
    uintArray[i] = static_cast<uint8_t>(dataPtr[i]);
}

// 现在,您可以使用uintArray作为uint8_t类型的数组发送给下位机

请注意,在使用完uintArray后,如果没有进一步的需求,记得使用delete[]操作符释放刚刚动态分配的内存,以避免内存泄漏。

希望这可以帮助到您!

这是十六进制吧


#include <QCoreApplication>
#include <QByteArray>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QByteArray data = "\x01\x02\x03\x04\x05";
    QString hexString = data.toHex();
    QStringList hexList;
    for (int i = 0; i < hexString.length(); i += 2) {
        QString subString = "0x" + hexString.mid(i, 2);
        hexList.append(subString);
    }
    qDebug() << "Hex values:" << hexList;
    for(int i=0;i<hexList.size();i++)
    {
        bool ok;
        int value = hexList[i].toInt(&ok, 16);
        qDebug()<<value;
    }

    return a.exec();
}