如何在PySide和Python 3.X中将字节写入QDataStream?

时间:2014-10-08 09:20:52

标签: python qt pyside binary-data qdatastream

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之前将其压缩。

1 个答案:

答案 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