Search code examples
pythonpython-3.xbinary-datanon-ascii-characters

Decoding String list in python from a binary file


I need to read a list of strings from a binary file and create a python list.

I'm using the below command to extract data from binary file:

tmp = f.read(100) 
abc, = struct.unpack('100c',tmp) 

The data that I can see in variable 'abc' is exactly as shown below, but I need to get the below data into a python list as strings.

Data that I need as a list: 'UsrVal' 'VdetHC' 'VcupHC' ..... 'Gravity_Axis'

b'UsrVal\x00VdetHC\x00VcupHC\x00VdirHC\x00HdirHC\x00UpFlwHC\x00UxHC\x00UyHC\x00UzHC\x00VresHC\x00UxRP\x00UyRP\x00UzRP\x00VresRP\x00Gravity_Axis'

Solution

  • Here is how i would suggest you to do it with one liner.

    You need to decode binary string and then you can do a split based on "\x00" which will return the list you are looking for.

    e.g

    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')
    

    Output Will look like this :

    ['UsrVal', 'VdetHC', 'VcupHC', 'VdirHC', 'HdirHC', 'UpFlwHC', 'UxHC', 'UyHC', 'UzHC', 'VresHC', 'UxRP', 'UyRP', 'UzRP', 'VresRP', 'Gravity_Axis']
    

    Hope this helps