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中,可以看到,使用了’>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文件。