Как преобразовать длинную шестнадцатеричную строку в массив байтов (0x69, 0x63 и т. д. и т. п.)

У меня есть длинная шестнадцатеричная строка (около 8000 байт), которую я хочу преобразовать в то, что я думаю, называется массивом байтов. (Пожалуйста, будьте добры, если я ошибся в имени.) Другими словами, строка начинается

69636E и т. д.

и мне нужен способ превратить это в строку, которая выглядит так в исходном коде C:

0x69, 0x63, 0x6e, и т. д.

Есть ли инструмент, который может это сделать? Я работаю в Windows, но могу работать и на Mac.

В идеале результирующую строку нужно было бы разбивать на новую строку после каждых 16 байт, но я знаю, что при необходимости могу сделать это вручную.

Моя цель — заменить существующую строку в некотором коде C (из исходного кода классического эмулятора Basilisk II для Mac). Код, который я пытаюсь заменить, представляет собой длинную строку, начинающуюся со строки 113 в этом файле:

posix_emu.cpp

Какой язык вы используете? Этот массив байтов — это массив строк в шестнадцатеричном формате, который вы указали, или в байтовом формате?

Milos Stojanovic 18.07.2024 17:46

Ответил в редактировании вопроса - извините, мне следовало изложить это раньше.

emendelson 18.07.2024 18:05

Можно ли использовать Python? Может сработать что-то вроде этого: onecompiler.com/python/42khrsuek

Milos Stojanovic 18.07.2024 18:29

Я думаю, это ответ. Спасибо! Попробую и отчитаюсь.

emendelson 19.07.2024 19:09

Работает отлично. Чтобы работать с моей длинной строкой, мне пришлось загрузить код и запустить его со своего диска, отправив выходные данные в файл. - Это ИМЕННО то, что мне нужно. Еще раз большое спасибо.

emendelson 20.07.2024 00:43

Без проблем. Я написал ответ, чтобы вы могли его проверить.

Milos Stojanovic 20.07.2024 07:50

Опять же, идеально. Спасибо. Помечено как ответ.

emendelson 21.07.2024 14:40
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
7
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать входной файл для чтения шестнадцатеричной строки (или просто жестко закодировать шестнадцатеричную строку в код). Если вы используете 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

Другие вопросы по теме