问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

qt中如何解包利用python 的struct.pack()函数打包的数据

发布网友 发布时间:2022-04-29 20:23

我来回答

3个回答

热心网友 时间:2022-04-18 10:08

在Python中使用struct模块打包数据和在C/C++语言中定义一个结构体(也是把多个成员打包到一块)差不多。
只要客户端告诉了你打包的数据的格式(比如:数据包的总长度、数据包中各个数据域的长度及类型,以及端序——大端还是小端),然后定义一个等价的C语言结构体,并把接收到的数据放入一个这样的结构体变量(对象)中就完成了解包工作。然后,访问结构体中的特定成员,就是访问传送过来的特定数据了。追问我在python中打包的数据格式为

fhead = struct.pack('qq%ds'%len(filename),totalSize,len(filename),filename)
请问在qt中应该如何定义struct呢?

追答由于数据包长度不是固定的,而且数据包也不复杂,这里就不用定义结构体了。可以按照如下方式处理(假设你的TCP Server中包含一个QTcpSocket的子类——ClientObj,来表示一个连接对象):
ClientObj::ClientObj(QObject *parent) :
QTcpSocket(parent)
{
connect(this, SIGNAL(readyRead()), this, SLOT(readClient()));
}

void ClientObj::readClient()
{
QDataStream in(this);
in.setVersion(QDataStream::Qt_5_2);
in.setByteOrder(QDataStream::LittleEndian);

qlonglong totalSize;
qlonglong fileNameLen;
QByteArray fileNameBytes;

in >> totalSize >> fileNameLen;
fileNameBytes = read(fileNameLen);

QString fileName(fileNameBytes);

std::cout << totalSize << ", " << fileNameLen << ", " << qPrintable(fileName) << std::endl;
}
需要注意的一点是服务器端接收数据的时候,需要和客户端打包时使用相同的端序。Python 3.x中:
fhead = struct.pack('qq%ds'%len(filename),totalSize,len(filename),filename)
生成一个小端的数据包;
那么,在使用QDataStream来解析数据包时,也要指定为小端。否则,多字节的整数的高低字节顺序就反了。
QDataStream默认使用大端,这也是我调用setByteOrder的原因(我觉得,让客户端把数据以大端方式打包发送会更妥当)。

热心网友 时间:2022-04-18 11:26

好像不是这样用的吧

热心网友 时间:2022-04-18 13:00

qt是c++?去c++吧问问
qt中如何解包利用python 的struct.pack()函数打包的数据

在Python中使用struct模块打包数据和在C/C++语言中定义一个结构体(也是把多个成员打包到一块)差不多。只要客户端告诉了你打包的数据的格式(比如:数据包的总长度、数据包中各个数据域的长度及类型,以及端序——大端还是小端),然后定义一个等价的C语言结构体,并把接收到的数据放入一个这样的结构...

python一共有多少库?

我们可以用sys包来控制这一程序运行的许多参数,比如说Python运行所能占据的内存和CPU,Python所要扫描的路径等。另一个重要功能是和Python自己的命令行互动,从命令行读取命令和参数。 3、random:用于生成随机数的库 Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元...

qt process 如何运行一个python程序

因为process.start()函数实质是采用命令行中"start XXX"的方式启动XXX。这里的XXX仅仅适用于大部分的exe可执行文件以及一些常用文件。对于py或者pyw文件都不行。有两种解决方案:另外编写一个bat用来启动py文件,就可以使用start启动这个bat就可以了;使用另一个函数“QDesktopServices::openUrl”来启动py文件...

python有多少个游戏模块(python游戏模块有哪些)

2、Panda3D:是由迪士尼开发的3D游戏引擎,一个用于Python和C++程序的3D渲染和游戏开发框架,并由卡内基梅陇娱乐技术中心负责维护,使用C++编写的,针对Python进行了完全的封装。3、Pygame:它是一组Python模块,用来编写游戏,可支持Python3.7,游戏例子有:纸牌游戏、超级马里奥、击球等多种游戏。4、Pyogre...

python的qyqt要学多久(pyqt难学吗)

随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。Python解释器易于扩展,可以使用C语言或C++扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。结语:以上就是首席CTO笔记为大家介绍的关于python的qyqt要学多久和pyqt难学吗的全部内容了,希望对大家有所帮助,...

如何用python解析mnist

3.如何使用Python解析数据呢? 首先需要安装python的图形处理库PIL,这个库支持像素级别的图像处理,对于学习数字图像处理有很大的帮助。安装完成之后,就可以进行图像的解析了。看一下代码:4.首先打开文件,然后分别读取魔数,图片个数,以及行数和列数,在struct中,可以看到,使用了’&gt;IIII’,这是什么...

python有多少个标准库(python常见的标准库)

Numpy通过将高速C库包装在Python接口中来工作,而Cython使用可选的类型将Python编译为C以提高性能。但是Numba无疑是最方便的,因为它允许使用装饰器选择性地加速Python函数。 5、Matlibplot 做过数据分析,数据可视化的数学学生一定知道matlab这个软件,这是一个收费的数学商用软件,在Python中,Matlibplot就是为了实现这个软件...

QT、python实现高速动态绘图(基于pyside6、QCharts)

在Python编程中,通过集成QT的QCharts模块和pyside6,我们可以实现高速动态绘图,其数据刷新速度高达每5毫秒,显著超越了Matplotlib的性能。这对于需要实时数据采集和显示的场景,如工业控制设备的数据监控界面,是非常理想的解决方案。最初,为了满足项目需求,我试图使用matplotlib的animation功能来绘制动态曲线,...

python2对应qt多少(qtpython)

1、进行pip的安装目录。Python27/Scripts目录下面。2、执行pipinstallpython-qt5 3、OK,搞定,就这么简单。python2.5中设置Pythonpathpython2.5你使用QT5就是一个错误。python2.X需要使用QT4。你上网查查资料就知道了。python3才使用QT5。不过到目前为止,我一直使用QT4.X,以前安装过QT5还没有正式...

...RtBasic文件下载与连续轨迹加工的Python+Qt开发

使用Python+QT实现ZMC432H连续轨迹加工,首先配置Python+Qt开发环境,通过下载Python解释器、安装pyside2或pyside6(根据Python版本选择),并配置PyCharm Community Edition以使用自定义工具如qt的界面编辑器。通过安装Qt Designer和Pyside2-uic,开发人员可以直接在PyCharm中设计UI界面和生成UI文件的py文件。

python之struct详解 struct用法python python中struct模块 pythonstruct结构体 python bytes转str struct unpack struct python Python struct python socket
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
迷茫时发朋友圈的句子 戴尔Precision M4600(酷睿I5 2520M/4GB/500GB/1366x768)基本参数_百度... 发动机通电不自检,,风扇一直转 决战平安京铃鹿御前技能介绍 最强射手正式上线 ...顺序介绍_《决战!平安京》泷夜叉姬技能连招顺序是什么 如何去除牙石?溶解牙石疗法有哪些啊? 暴力罗曼史剧情简介 暴力罗曼史中到第几集大家发现朴武烈的保姆是坏人的? 暴力罗曼史 爱普生635k针式打印机 用的进销存软件 打印出单据来不正不是偏左就是... 实习生表格里的实习部门跟实习岗位是什么意思,该怎么填? nvidia hd音频驱动有什么用?跟 realtek hd音频驱动有什么区别? 就业见习岗位是什么意思? Realtek和NVIDIA可以同时输出吗? python 参数 解包 python参数,解包,变量! 杭州地铁1号线坐到哪个站离下沙6号大街伊比利亚电子商务园近 nivida和realtek两个声卡都需要? 华尔思bm207a怎么下载百度手机助手? GREENVILLE格林维尔港利比里亚的,西非航线。那里出口货物安全吗?有集装箱船能到吗? 利比里亚的木材运往中国的最短航线经过哪个海峡? 利比里亚的电视制式是NTSC制式还是PAL制式呢? 厄瓜多尔工业用电多少伏?也是三相四线制吗 利比里亚维和需带什么东西? 利比里亚*教学校发生火灾造成至少28人死亡,学校火灾应该怎么防范? 西非利比里亚国家使用的电源插口与中国一样吗? 怎么加日本人的QQ好友 怎么添加日本人 怎么在MSN上加日本的网友啊? 怎么添加在日本的朋友的 下载3 6 0 手机 百度 助手 我有Realtek和nvidia的两个声卡驱动,该卸载哪个? 怎么用python2.7解包文件 nVIDIA和realtek声卡驱动问题,急求!!! python中在元组解包中使用星号为什么得到的是列表? python 参数,解包,变量,中程序看不懂,我是新手,求指教。最好把正确... 药学专业毕业有哪些实习岗位 求助,求python关于socket协议打包和解包相关方法 我的声卡是Nvidia的,用驱动人生下载最新声卡驱动,显示有nvidia和realtek这样的两个驱动,我是两个都下还 毕业实习怎么找实习单位? realtek声卡驱动和nvidia音频驱动会冲突么?两者分别什么功能?可以把nvidia的音频驱动卸载吗? 在培训学校实习的实习岗位的性质和内容怎么填 在哪里可以下载百度手机助手 大学毕业 实习 工作 该如何选择 声卡型号是nvidia high definition audio和是realtek high definition audio的有什么区别? 大学实习是什么,必须要实习么,是自己找,还是学校安排? 应届毕业生想找实习机会,有哪些好的途径? 如何设置 NVIDIA与Realtek HD 不在系统托盘显示 电脑中同时存在nvidia high definition audio和realtek high definition audio 这两个有区别吗? nvidia high definition audio 和Realtek(R)Audio都显示未插入是什么原因(ps:用的是win10系统)?