c++ - 如何从 QDataStream 中读取数组

标签 c++ qt

我想将存储在 vector (保存结构)中的数据写入文件,并从该文件读取数据。我尝试使用 QDataStream 并重载“>>”和“<<”运算符来执行此操作。一切正常,直到我向结构中添加一个 char 数组。 我尝试从 QDataStream 读取字符串的方式一定有问题。我尝试了不同的方法来读取字符串,但总是出错。

结构如下:

typedef struct
{
   char data[cNetworkMessageLengthMax + 1];   //cNetworkMessageLengthMax=19
} __attribute__((packed)) networkMessageBody_t;


typedef struct 
{
    baseStation_daytime_t   timestamp;
    uint32_t                blueId;
    networkMessageBody_t    message;
} __attribute__((packed)) baseStation_mailbox_t;

和运营商:

QDataStream &operator<<(QDataStream &out, const std::vector<baseStation_mailbox_t> &data)
{
    for(uint8_t i=0; i < data.size(); i++)
    {
        out << data[i].timestamp.time.hour;
        out << data[i].timestamp.time.minute;
        out << data[i].timestamp.time.second;
        out << data[i].timestamp.time.thousandth;
        out << data[i].timestamp.date.day;
        out << data[i].timestamp.date.month;
        out << data[i].timestamp.date.year;

        out << data[i].blueId;

        out << data[i].message.data;
    }
    return out;
}

QDataStream &operator>>(QDataStream &in, std::vector<baseStation_mailbox_t> &data)
{
    uint16_t tmp16;
    uint32_t tmp32;
    char tmpChar[20];

    uint8_t i = 0;
    while(in.atEnd() == false)
    {
        data.emplace_back();

        in >> data[i].timestamp.time.hour;
        in >> data[i].timestamp.time.minute;
        in >> data[i].timestamp.time.second;
        in >> tmp16;
        data[i].timestamp.time.thousandth = tmp16;
        in >> data[i].timestamp.date.day;
        in >> data[i].timestamp.date.month;
        in >> tmp16;
        data[i].timestamp.date.year = tmp16;

        in >> tmp32;
        data[i].blueId = tmp32;

        in >> tmpChar;                 //HERE I get errors
        data[i].message.data = tmpChar;

        i++;
    }

    return in;
    }

最佳答案

替换:

  • out << data[i].message.data;out << QByteArray::fromRawData(data[i].message.data,std::extent<decltyple(data[i].message.data)>::value);
  • char tmpChar[20];QByteArray tmpChar;
  • data[i].message.data = tmpChar;std::copy(tmpChar.constBegin(),tempChar.constEnd(),data[i].message.data);

关于c++ - 如何从 QDataStream 中读取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44805411/

相关文章:

c++ - 如何管理自定义 Qt 插件的依赖项(不适用于 Qt Creator)?

c++ - 带 Return 键的 Qt Tab 键顺序

c++ - 向特定 IP 发送魔法数据包的程序

c++ - 自动工具编译器

c++ - 如何使用 std::vector 作为参数从 Fortran 77 调用 C++ 函数?

c++ - 带有进度条的 Web 请求

c++ - Qt 线程似乎并没有在核心上平均共享

c++ - 简单 qtest 失败并显示 'multiple definition of main'

c++ - 如何卡住一个变量,因为它第一次分配?

c++ - IIS:调用 ISAPI 筛选器上的 GetProcAddress 失败