python中带有位串的复数的二进制表示形式

时间:2019-07-17 11:45:43

标签: python python-3.x parsing complex-numbers bitstring

我有一个包含文本和二进制文件的文件。文本用于标识二进制数据块的开始和结束,该二进制数据表示复数列表,例如(1.5 + 5.6j)(...)。

我已经实现了以下方法来检测数据的开始和结束位置,但是我不确定如何解析数据以提取复数。

输入文件“ short.log”:

NOW: ^@ºÿ¦ÿÉ^B<80>^AÓ^@k^C^HüÀ^Búú<88>^@^Uü4ÿ^[ÿ<88>^@»^@}^A^@N^Auÿi^Bòü5^E¿ùï^DHûÍÿö^CÈü^C^KÌ^@¡^H^D^GÿþP^E¡ö]ý<95>öñ÷Ùûøú^@j^@ END

这是读取它的代码:

from bitstring import ConstBitStream
import os
import struct

bin_file = 'short.log'
byte_data = b'NOW: '

def parse(byte_data):
    fileSizeBytes = os.path.getsize(bin_file)
    data = open(bin_file, 'rb')

    s = ConstBitStream(filename=bin_file)
    occurances = s.findall(byte_data, bytealigned=True)
    occurances = list(occurances)
    totalOccurances = len(occurances)
    byteOffset = 0                                                          
    occurances2 = s.findall(b' END', bytealigned=True)
    occurances2 = list(occurances2)
    totalOccurances2 = len(occurances2)
    byteOffset = 0   

    for i in range(0, len(occurances)):
        occuranceOffset = (hex(int(occurances[i]/8)))  
        s.bitpos = occurances[i]
        data = s.readto(b' END')

        parsedata(data)

def parsedata(data):
    #Here to parse complex number

parse(byte_data)

1 个答案:

答案 0 :(得分:0)

这取决于二进制数据中复数的编码方式。例如,可能是浮点数,实部为32位,虚部为32位。如果是这样,那么s.readlist('2*float:32')将阅读并解释实部和虚部。

也可以是每个64位,或者是完全不同的格式。如果您有一个示例,可以知道结果是什么,那么可以尝试几种格式,然后看看有什么用。