【发布时间】:2015-02-28 22:26:56
【问题描述】:
我有一个打包的字符串,每个字符最初都是一个无符号字节,但存储为 7 位,然后打包到一个无符号字节数组中。我正在尝试找到一种在 Python 中解压缩此字符串的快速方法,但我编写的使用 bitstring 模块的函数运行良好,但速度很慢。看起来这样的事情不应该那么慢,但我可能做得非常低效......
这看起来可能是微不足道的,但我只是不知道该使用什么,也许已经有一个函数可以解包字符串?
from bitstring import BitArray
def unpackString(raw):
msg = ''
bits = BitArray(bytes=raw)
mask = BitArray('0b01111111')
i = 0
while 1:
try:
iByte = (bits[i:i + 8] & mask).int
# value of 0 denotes a line break
if iByte == 0:
msg += '\n'
elif iByte >= 32 and iByte <= 126:
msg += chr(iByte)
i += 7
except:
break
return msg
【问题讨论】:
-
您能否发布您的数据样本,以便我们确定我们为您提供有效的解决方案?
-
当然,原始数据的示例位于:files.eas.cornell.edu/~mjs472/rawbytes.bin
-
此外,该数据适用于 NWS 定义的天气字符串。解压后应该看起来像“
... ”。 -
现在没有时间编写代码,但您可能想要做的是迭代字节,将每两个连续字节转换为一个单词(是的,字节重叠),根据需要移动,然后进行掩蔽。这应该会显着加快速度。
-
这里,你的函数应用于你的原始数据样本(方法:
unpackString(open("rawbytes.bin", "rb").read()))返回'\n\n \n\n\n,\n\n\n\n\n\n\n<None>\nSC.Y\nWS.W\nWS.A\n'——你确定这是正确的吗?
标签: python string bitmap bitstring