Python Hex-строка в Hex-строку с обратной косой чертой - PullRequest
0 голосов
/ 20 июня 2020

Я действительно запутался, с байтовыми строками в Python.

Мне нужно сравнить две байтовые строки, поэтому они должны быть преобразованы одинаково (?)

I иметь строку шестнадцатеричных значений:

52fab71f49a01ef92e793b41c13c5458080679919c7e5888f195935bd50c1bb8

Если я конвертирую это в байтовую строку с bytes.fromHex('52fab...') * *, я получаю * 10 * 10 1014 * b'R \ xfa \ xb7 \ x1fI \ xa0 \ x1e \ xf9.y; А \ xc1

1 Ответ

0 голосов
/ 21 июня 2020

Вы не можете.

Если вы используете стандартный тип bytes, то его строковое представление будет выглядеть так: оно будет представлять все символы ASCII как самих себя. Например, b'\x42' - это символ ASCII 'R', поэтому он будет напечатан сам по себе.

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

def print_me(thing: bytes):
    print(''.join(
        f'\\x{byte:02x}'
        for byte in thing
    ))

>>> print_me(bytes.fromhex("52fab71f49a01ef92e793b41c13c5458080679919c7e5888f195935bd50c1bb8"))
\x52\xfa\xb7\x1f\x49\xa0\x1e\xf9\x2e\x79\x3b\x41\xc1\x3c\x54\x58\x08\x06\x79\x91\x9c\x7e\x58\x88\xf1\x95\x93\x5b\xd5\x0c\x1b\xb8

, но базовые данные, хранящиеся в вашем bytes объекте, останутся такими же, независимо от того, как вы их представляете.

...