从二进制文件解码 python 中的字符串列表
Decoding String list in python from a binary file
我需要从二进制文件中读取字符串列表并创建一个 python 列表。
我正在使用以下命令从二进制文件中提取数据:
tmp = f.read(100)
abc, = struct.unpack('100c',tmp)
我在变量 'abc' 中看到的数据完全如下所示,但我需要将以下数据作为字符串放入 python 列表中。
我需要的数据列表:'UsrVal' 'VdetHC' 'VcupHC' ..... 'Gravity_Axis'
b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis'
如果您在这里采用快速而混乱的方式,并假设您的字符串
b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis'
实际上被解释为
" b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis' "
然后下面几行代码的结果是 'b' 有你想要的数组。
a = {YourStringHere}
b = a[2:-1].split("\x00")
以下是我建议您使用一个衬垫的方法。
您需要解码二进制字符串,然后您可以根据 "\x00"
进行拆分,这将 return 您要查找的列表。
例如
my_binary_out = b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis'
decoded_list = my_binary_out.decode("latin1", 'ignore').split('\x00')
#or
decoded_list = my_binary_out.decode("cp1252", 'ignore').split('\x00')
输出 看起来像这样:
['UsrVal', 'VdetHC', 'VcupHC', 'VdirHC', 'HdirHC', 'UpFlwHC', 'UxHC', 'UyHC', 'UzHC', 'VresHC', 'UxRP', 'UyRP', 'UzRP', 'VresRP', 'Gravity_Axis']
希望对您有所帮助
我需要从二进制文件中读取字符串列表并创建一个 python 列表。
我正在使用以下命令从二进制文件中提取数据:
tmp = f.read(100)
abc, = struct.unpack('100c',tmp)
我在变量 'abc' 中看到的数据完全如下所示,但我需要将以下数据作为字符串放入 python 列表中。
我需要的数据列表:'UsrVal' 'VdetHC' 'VcupHC' ..... 'Gravity_Axis'
b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis'
如果您在这里采用快速而混乱的方式,并假设您的字符串
b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis'
实际上被解释为
" b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis' "
然后下面几行代码的结果是 'b' 有你想要的数组。
a = {YourStringHere}
b = a[2:-1].split("\x00")
以下是我建议您使用一个衬垫的方法。
您需要解码二进制字符串,然后您可以根据 "\x00"
进行拆分,这将 return 您要查找的列表。
例如
my_binary_out = b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis'
decoded_list = my_binary_out.decode("latin1", 'ignore').split('\x00')
#or
decoded_list = my_binary_out.decode("cp1252", 'ignore').split('\x00')
输出 看起来像这样:
['UsrVal', 'VdetHC', 'VcupHC', 'VdirHC', 'HdirHC', 'UpFlwHC', 'UxHC', 'UyHC', 'UzHC', 'VresHC', 'UxRP', 'UyRP', 'UzRP', 'VresRP', 'Gravity_Axis']
希望对您有所帮助