在QDataStream
的Qt文档中,它说
QDataStream类提供二进制数据到QIODevice的序列化。
这就是我想做的事情。我想在Python 3.X上的PySide中将字节发送到QDataStream
。
writeRawData
但需要unicode
作为输入。
import zlib
from PySide import QtCore
file = QtCore.QFile("test.dat")
file.open(QtCore.QIODevice.WriteOnly)
data = "some text"
compressed_data = zlib.compress(data.encode()) # type is now bytes
out = QtCore.QDataStream(file)
out.writeRawData(compressed_data)
给出TypeError
:
TypeError: 'PySide.QtCore.QDataStream.writeRawData' called with wrong argument types:
PySide.QtCore.QDataStream.writeRawData(bytes)
Supported signatures:
PySide.QtCore.QDataStream.writeRawData(unicode, int)
此外,来自writeBytes
的{{1}}未由PySide(1.2.2)实施。
那么,如何通过PySide和Python 3.X中的QDataStream
发送二进制数据?
背景:最后,我想通过QDataStream
方便地将二进制数据发送到QSocket
,我想在使用QDataStream
之前将其压缩。
答案 0 :(得分:1)
我可以回答我自己的问题。解决方案是将字节字符串包装在QByteArray
中,并使用QDataStream
的左/右移位运算符。
写作示例:
# wrap data (type byte) in QByteArray
bytearray = QtCore.QByteArray(data)
# write to data stream
qdatastream << bytearray
阅读示例:
# allocate empty qbytearray
bytearray = QtCore.QByteArray()
# read from data stream
qdatastream >> bytearray