Нежелательное шестнадцатеричное значение в файле - PullRequest
0 голосов
/ 22 апреля 2020

Я создал небольшой скрипт python3 следующим образом:

import sys

with open(sys.argv[1], 'r') as f:
    hex_data = f.readline().split()
    with open('hexConverted', 'a') as e:
        for i in hex_data:
            print("Writing {} in file".format(i))                        #for debugging
            e.write(chr(int(i, 16)))

, который читает файл 'f' в следующем формате:

89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52

и создает новый файл с шестнадцатеричными значениями, как указано выше. Но он добавляет нежелательную \ xC2 в начале каждый раз.

$ hexdump -C hexConverted
00000000  c2 89 50 4e 47 0d 0a 1a  0a 00 00 00 0d 49 48 44  |..PNG........IHD|
00000010  52                                                |R|
00000011

Даже команда отладки print не упоминает это шестнадцатеричное значение. Почему это происходит?

1 Ответ

2 голосов
/ 22 апреля 2020

Чтобы уточнить мой комментарий, вам нужно добавить «b» к открытию и затем передать байтовый объект для записи. Если вы этого не сделаете, он попытается закодировать файл как Unicode, а c2 - это специальный код Unicode.

import sys

with open(sys.argv[1], 'r') as f:
    hex_data = f.readline().split()
    with open('hexConverted', 'ab') as e:
        for i in hex_data:
            print("Writing {} in file".format(i))
            e.write(int(i,16).to_bytes(1,'big'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...