#python
Вопрос:
У меня есть строка в Python, содержащая некоторую шестнадцатеричную информацию (длина 256) следующим образом:
Str0 = '04008020546c359986812644420e453113e209afeaaeeb316f3a07000000000000000000b8fa13b3fca087c1456daac626ab9b8a47eae821a326f17e0ffffc15433df709b0f718610b1812175a5c9544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280'
Эта строка шестнадцатеричная, и нам нужно создать байтовую строку, используя ее. Затем выведите один байт (его числовое значение) для каждой новой строки.
Я думал, что это сработает, но это не так:
bytes_object = bytes.fromhex(Str0)
ascii_string = bytes_object.decode('ASCII')
Ошибка: кодек ascii не может декодировать байт 0x80 в позиции 2: порядковый номер не в диапазоне(128)
Комментарии:
1. Конечно, ваша
bytes_object
переменная-это то, что вам нужно?2. просто число для каждого байта в новой строке. Например: 40 128 и так далее..
Ответ №1:
Первая строка: bytes_object = bytes.fromhex(Str0)
предоставляет тип байтов, который функционирует как необработанные байтовые данные / массив байтов. чтобы напечатать числовое значение каждого байта, вам нужно сделать следующее: for x in bytes_object : print(x)
Если вам нужен массив числовых значений, которые вы можете использовать [int(x) for x in bytes_object]
Ответ №2:
В шестнадцатеричном формате каждые 2 символа представляют собой байт. Таким образом, из вашей шестнадцатеричной строки соответствующие байты будут:
0: 0x04 (decimal: 4)
1: 0x00 (decimal: 0)
2: 0x80 (decimal: 128)
3: 0x20 (decimal: 32)
... etc.
Преобразование этой строки в байты нормально, так как байт может иметь любое значение от 0 до 255.
Проблема в том, что вы пытаетесь расшифровать его как ASCII. Если вы посмотрите на таблицу ASCII, вы увидите, что максимальное значение в таблице равно 127 (0x7F). Байт в позиции [2], который вы пытаетесь декодировать, имеет шестнадцатеричное значение 0x80 (десятичное значение 128), которое не является допустимым символом ASCII.
Итак, вопрос в том, откуда взялась ваша исходная шестнадцатеричная строка и что заставляет вас думать, что она представляет допустимые символы ASCII?
Комментарии:
1. Первая часть, о которой я знаю. Строка представляет собой хэш-значение некоторых данных, и мне она нужна в байтовом формате, чтобы ее можно было ввести в SHA256 в качестве входных данных. Он может не представлять ASCII, все, что я хочу, это преобразовать его в байтовую строку с числовым значением для каждого байта.
2. Тогда вам не нужна линия
ascii_string = bytes_object.decode('ASCII')
. Удалите эту строку и просто используйтеbytes_object
для ввода SHA256.