Python从xml文件读取基本64字符串到类似于QT的字节数组

时间:2015-11-17 15:49:04

标签: python xml qt base64

我正在从xml文件中读取base64字符串。写入xml文件的base64字符串是从QTc ++程序生成的。我有Qtc ++程序解析xml文件并能够从base64 string生成数据。我想用python做同样的事情我无法想象如何将base64读作类似于QTc ++的字节数组。 我解析xml并解码数据文件的Qt c ++代码如下所示。为简单起见,我只包括编码的base64字符串的一部分。

          datastring='AAAAAAAAAAA/YGJN0vGp/D9wYk3S8an8P3iTdLxqfvo/'            

          QByteArray xByteArray =QByteArray::fromBase64('datastring')
          QDataStream xInStream(xByteArray);
            while (!xInStream.atEnd())
            {
              double d;
              xInStream >> d;
              qDebug()<<d;
              pPlotCurve->addXAxisValue(d);
            }

我能够使用QTc ++解码数据,输出看起来像[0.0,0.002 0.004,......]

我正在尝试在python中解码相同的base64字符串,我收到了乱码数据。我的Python代码是

            import base64
            # I parse the xml file and retrieve the data below
            datastring = 'AAAAAAAAAAA/YGJN0vGp/D9wYk3S8an8P3iTdLxqfvo/'
            out = base64.b64decode(datastring)
            print out

当我对上面的代码进行解码时,我得到了加扰数据,如何执行与上述QTc ++程序相同的操作并获得相同的输出。我尝试了很多方法但没有任何效果。

1 个答案:

答案 0 :(得分:1)

base64.b64decode将获取你的base64字符串并返回字节。那些字节只是一堆没有意义的位。您需要告诉Python如何将这些位转换为有意义的数据。

使用struct模块告诉Python如何解释二进制数据:

import base64
import struct
data_base64 = 'AAAAAAAAAAA/YGJN0vGp/D9wYk3S8an8P3iTdLxqfvo/'
data_bytes = base64.b64decode(data_base64)
# '>ddddx' big endian, 4 8-byte floating point plus 1 extra byte
struct.unpack('>ddddx', data_bytes) 
# gives (0.0, 0.002, 0.004, 0.006)

要解压缩任意数量的双打,请执行以下操作:

[struct.unpack_from('>d', data_bytes, offset)[0] for offset in range(0, len(data_bytes), 8)]
# gives [0.0, 0.002, 0.004, 0.006]

请注意,您的示例数据长度为33个字节。如果你使用第二种方法,请确保你的字节长度是8的倍数,否则你将获得struct.error: unpack_from requires a buffer of at least 8 bytes