У меня есть длинная шестнадцатеричная строка (около 8000 байт), которую я хочу преобразовать в то, что я думаю, называется массивом байтов. (Пожалуйста, будьте добры, если я ошибся в имени.) Другими словами, строка начинается
69636E
и т. д.
и мне нужен способ превратить это в строку, которая выглядит так в исходном коде C:
0x69, 0x63, 0x6e,
и т. д.
Есть ли инструмент, который может это сделать? Я работаю в Windows, но могу работать и на Mac.
В идеале результирующую строку нужно было бы разбивать на новую строку после каждых 16 байт, но я знаю, что при необходимости могу сделать это вручную.
Моя цель — заменить существующую строку в некотором коде C (из исходного кода классического эмулятора Basilisk II для Mac). Код, который я пытаюсь заменить, представляет собой длинную строку, начинающуюся со строки 113 в этом файле:
Ответил в редактировании вопроса - извините, мне следовало изложить это раньше.
Можно ли использовать Python? Может сработать что-то вроде этого: onecompiler.com/python/42khrsuek
Я думаю, это ответ. Спасибо! Попробую и отчитаюсь.
Работает отлично. Чтобы работать с моей длинной строкой, мне пришлось загрузить код и запустить его со своего диска, отправив выходные данные в файл. - Это ИМЕННО то, что мне нужно. Еще раз большое спасибо.
Без проблем. Я написал ответ, чтобы вы могли его проверить.
Опять же, идеально. Спасибо. Помечено как ответ.
Вы можете использовать входной файл для чтения шестнадцатеричной строки (или просто жестко закодировать шестнадцатеричную строку в код). Если вы используете VSCode или какой-либо редактор, который обновляет содержимое файла, как только оно изменяется, вы можете установить одинаковый входной и выходной файл и просто скопировать и вставить то, что вы получите.
def hex_to_byte_array(hex_string):
bytes_list = [f"0x{hex_string[i:i+2]}" for i in range(0, len(hex_string), 2)]
lines = []
for i in range(0, len(bytes_list), 16):
lines.append(", ".join(bytes_list[i:i+16]))
return ",\n".join(lines)
with open("input.txt", "r") as input_file:
hex_string = input_file.read().strip()
# or just hardcode hex_string
# hex_string = "69636e68656c6c6f776f726c646865786e6d"
byte_array = hex_to_byte_array(hex_string)
with open("output.txt", "w") as output_file:
output_file.write(byte_array)
print(byte_array)
# 0x69, 0x63, 0x6e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x68, 0x65, 0x78,
# 0x6e, 0x6d
Какой язык вы используете? Этот массив байтов — это массив строк в шестнадцатеричном формате, который вы указали, или в байтовом формате?