Декодер Python3 удаляет пробелы, когда должны быть сохранены - PullRequest
0 голосов
/ 31 декабря 2018

Я читаю двоичный файл с кодом на STM32.Я поместил в код намеренно 2 строки const, которые позволяют мне читать версию SW и описание из данного файла.

Когда вы открываете бинарный файл в шестнадцатеричном редакторе или даже в python3, вы видите правильную форму.Но при запуске text = data.decode('utf-8', errors='ignore') он удаляет нули из файла!Я не хочу этого, поскольку я сохраняю символы EOL для правильного разделения и извлечения интересующей меня строки.

(предварительный просмотр конца переменной данных)

Svc \ x00.. \ Src \ adc.c \ x00 .. \ Src \ can.c \ x00defaultTask \ x00Task_CANbus_receive \ x00Task_LED_Controller \ x00Task_LED1_TX \ x00Task_LED2_RX \ x00Task_PWM_Controller \ x00 ** SW_VER: GN_1.01 \ x00 \ x00 \ x00 \ x00 \ x00 \x00MODULE_DESC: generic_module \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \x00 ** Task_SuperVisor_Controller \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x01 \ x02 \ x03 \ x04 \ x06 \ X07 \ x08 \ т \ x00 \ x00 \ x00 \ x00 \ x01 \ x02\ x03 \ x04 .. \ Src \ tim.c \ X005! \ x00 \ x08 \ x11! \ x00 \ x08 \ x01 \ x00 \ x00 \ x00 \ хаа \ хаа \ хаа \ хаа \ x01 \ x01 \ й \ x00\ x02 \ x04 \ nd \ x00 \ x00 \ x00 \ x00 \ xa2J \ x04 '

(предварительный просмотр текста, то есть то, что я получаю после декодирования)

rg@ IDLE TmrQ Tmr Svc .. \ Src \ adc.c .. \ Src \ can.c defaultTask Task_CANbus_receive Task_LED_Controller Task_LED1_TX Task_LED2_RX Task_PWM_Controller SW_VER: GN_1.01
MODULE_DESC: generic_module
Task_SuperVisor_Controller .. \ Src \ tim.c 5!!дд J

with open(path_to_file, "rb") as binary_file:
    # Read the whole file at once
    data = binary_file.read()
    text = data.decode('utf-8', errors='ignore')

    # get index of "SW_VER:" sting in the file
    sw_ver_index = text.rfind("SW_VER:")
    # SW_VER found
    if sw_ver_index is not -1:
        # retrive the value, e.g. "SW_VER:WB_2.01" will has to start from position 7 and finish at 14
        sw_ver_value = text[sw_ver_index + 7:sw_ver_index + 14]
        module.append(tuple(('DESC:', sw_ver_value)))
    else:
    # SW_VER not found
        module.append(tuple(('DESC:', 'N/A')))


    # get index of "MODULE_DESC::" sting in the file
    module_desc_index = text.rfind("MODULE_DESC:")
    # MODULE_DESC found
    if module_desc_index is not -1:
        module_desc_substring = text[module_desc_index + 12:]
        module_desc_value = module_desc_substring.split()
        module.append(tuple(('DESC:', module_desc_value[0])))
        print(module_desc_value[0])

Как видите, мои белые персонажи исчезли, а они должны присутствовать

...