当前位置: 首页 > wzjs >正文

网络工程师自学网站网站后台无法修改信息

网络工程师自学网站,网站后台无法修改信息,如何建立一个网站论坛,泰州市住房和城乡建设局网站在Qt中读写结构体字节数据通常涉及将结构体转换为字节数组(QByteArray)或直接从内存中读写。以下是几种常见方法&#xff1a; 方法1&#xff1a;使用QDataStream读写结构体 cpp #include <QFile> #include <QDataStream>// 定义结构体 #pragma pack(push, 1) //…

        在Qt中读写结构体字节数据通常涉及将结构体转换为字节数组(QByteArray)或直接从内存中读写。以下是几种常见方法:

方法1:使用QDataStream读写结构体

cpp

#include <QFile>
#include <QDataStream>// 定义结构体
#pragma pack(push, 1) // 1字节对齐,避免内存对齐问题
struct MyStruct {int id;double value;char name[20];
};
#pragma pack(pop)// 写入结构体到文件
void writeStruct(const QString& filename, const MyStruct& data) {QFile file(filename);if (file.open(QIODevice::WriteOnly)) {QDataStream out(&file);out.writeRawData(reinterpret_cast<const char*>(&data), sizeof(MyStruct));file.close();}
}// 从文件读取结构体
MyStruct readStruct(const QString& filename) {MyStruct data;QFile file(filename);if (file.open(QIODevice::ReadOnly)) {QDataStream in(&file);in.readRawData(reinterpret_cast<char*>(&data), sizeof(MyStruct));file.close();}return data;
}

方法2:使用QByteArray转换

cpp

// 结构体转QByteArray
QByteArray structToByteArray(const MyStruct& data) {return QByteArray(reinterpret_cast<const char*>(&data), sizeof(MyStruct));
}// QByteArray转结构体
MyStruct byteArrayToStruct(const QByteArray& bytes) {MyStruct data;if (bytes.size() == sizeof(MyStruct)) {memcpy(&data, bytes.constData(), sizeof(MyStruct));}return data;
}

方法3:处理结构体数组

cpp

// 写入结构体数组
void writeStructArray(const QString& filename, const QVector<MyStruct>& array) {QFile file(filename);if (file.open(QIODevice::WriteOnly)) {QDataStream out(&file);for (const auto& item : array) {out.writeRawData(reinterpret_cast<const char*>(&item), sizeof(MyStruct));}file.close();}
}// 读取结构体数组
QVector<MyStruct> readStructArray(const QString& filename) {QVector<MyStruct> array;QFile file(filename);if (file.open(QIODevice::ReadOnly)) {QDataStream in(&file);while (!in.atEnd()) {MyStruct data;in.readRawData(reinterpret_cast<char*>(&data), sizeof(MyStruct));array.append(data);}file.close();}return array;
}

注意事项

  1. 内存对齐:使用#pragma pack确保结构体在内存中是紧凑排列的,避免因对齐导致的额外填充字节

  2. 字节序:如果数据需要在不同平台间传输,需要考虑字节序问题,可以使用下面函数。
    QDataStream::setByteOrder(ByteOrder bo)
    参数
    bo - 可以是以下值之一:
    QDataStream::BigEndian - 大端序(高位字节在前,网络字节序)
    QDataStream::LittleEndian - 小端序(低位字节在前,x86处理器常用)
    功能说明
    此函数决定了多字节数据在流中的序列化方式:
    大端序(BigEndian):最高有效字节在前(用于网络协议和PowerPC等处理器)
    小端序(LittleEndian):最低有效字节在前(x86/x64处理器使用)
    设置适当的字节序应考虑:
    当前运行的平台
    协议或文件格式的要求
    读取数据的平台

  3. 安全性:从外部读取数据时要验证数据大小,防止缓冲区溢出

  4. 可移植性:结构体中的数据类型在不同平台可能有不同大小,考虑使用固定大小的类型如qint32等

示例1:完整读写流程

int main() {// 准备数据MyStruct data1 = {1, 3.14, "Test1"};MyStruct data2 = {2, 6.28, "Test2"};QVector<MyStruct> array = {data1, data2};// 写入文件writeStructArray("data.bin", array);// 读取文件QVector<MyStruct> readArray = readStructArray("data.bin");// 验证数据for (const auto& item : readArray) {qDebug() << "ID:" << item.id << "Value:" << item.value << "Name:" << item.name;}return 0;
}

示例2:考虑字节序读写

QFile file("data.bin");
if (file.open(QIODevice::WriteOnly)) {QDataStream out(&file);// 设置为大端序(网络字节序)out.setByteOrder(QDataStream::BigEndian);// 写入数据out << quint32(0x12345678);  // 将被写为 12 34 56 78// 切换为小端序out.setByteOrder(QDataStream::LittleEndian);out << quint32(0x12345678);  // 将被写为 78 56 34 12file.close();
}


文章转载自:

http://8zNKQryM.fkmrj.cn
http://jejZnDeD.fkmrj.cn
http://QKvGo1ui.fkmrj.cn
http://ze55KyL4.fkmrj.cn
http://BB1tVmor.fkmrj.cn
http://iDErX1zc.fkmrj.cn
http://qvZutkPN.fkmrj.cn
http://31y9zSLJ.fkmrj.cn
http://e2R7ngI8.fkmrj.cn
http://qelQifeY.fkmrj.cn
http://nzqt6NnX.fkmrj.cn
http://i9yViSx8.fkmrj.cn
http://eLg08Gyc.fkmrj.cn
http://xAv06BIV.fkmrj.cn
http://sIdOemjb.fkmrj.cn
http://5zj7CSHd.fkmrj.cn
http://znALCtDK.fkmrj.cn
http://DeIAqb1Z.fkmrj.cn
http://u2dGFdzM.fkmrj.cn
http://k2MQnl4Y.fkmrj.cn
http://mPzoVe0k.fkmrj.cn
http://D6s4GawI.fkmrj.cn
http://CaGXrS3G.fkmrj.cn
http://xp7lCcAM.fkmrj.cn
http://RMOdBZwv.fkmrj.cn
http://kprozC9j.fkmrj.cn
http://UvZLZAmX.fkmrj.cn
http://7WpdomBP.fkmrj.cn
http://oMJDpi4k.fkmrj.cn
http://geDP7cBr.fkmrj.cn
http://www.dtcms.com/wzjs/706362.html

相关文章:

  • 做网站难度企业宣传片走心文案
  • 网站优化的公司网站后台显示连接已重置
  • 乐山 做网站网坛最新排名
  • 网站设计的软件wordpress erp框架
  • 网站开发用户登陆的安全地产网站开发公司
  • 手机端网站开发的意义漯河优惠网站建设价格
  • 网站推广描述公众号怎么弄好看的模板
  • 广西住房与城乡建设厅网站鄂州seo
  • 青岛做网站建设价格低网页界面设计的界面结构组成
  • 单页网站怎么做竞价html模板 网站
  • 建立网站是什么建立的网站设计工作内容
  • 深圳高端网站定制能解析国外网站的dns
  • 横沥镇网站建设wordpress 理财
  • 什么网站做美食最好最专业做动漫短视频网站
  • 做微信公众号的网站吗怎样自己做企业网站
  • 衡阳网站开发培训洛可可设计公司现状
  • 上海企业微信网站制作网站怎么自己编辑模块
  • 响应式网站好还是自适应网站好成都网站工作室
  • 全屏网站 欣赏网店推广方法
  • 网站建设的总体目标企业建站的目的是什么
  • 安全狗网站白名单指什么网站交互方式
  • 网站开发企业购物网站功能模块图
  • 外贸网站 备案可以做引流网站的源码
  • 网站策划的内容有那些网站收录检测
  • 做dj网站用什么建站系统比较好网站模版asp
  • 矿区网站建设资源wordpress
  • 营销型企业网站建设的内容建筑类专业做教育的网站
  • 做网站的工作轻松吗工作室怎么开
  • 公司做哪个网站比较好wordpress启用表情
  • 个人网站推广费用网络维保