Я пытаюсь найти два байта внутри двоичного файла, затем увеличить значение этих двух байтов и заменить их внутри файла. Эти два байта находятся на позициях 0x82-0x83. На данный момент я успешно извлек эти два байта, используя это:
#!/usr/bin/env bash
BYTES=$(tail -c +131 "$1" | head -c 2)
Эти байты имеют значение: 1B 1F
. Я застрял с:
- Как преобразовать байты в целое число? Это должно быть
6943
десятичным. - Как добавить / отразить двоичные данные в файл
- Как записать увеличенные байты внутри файла на позиции 0x82-0x83. Я мог бы использовать
head -c 130 original.bin >> new_file.bin && magic_command_writing_bytes_to_file >> new_file.bin && tail -c +133 original.bin
, но должен быть лучший способ.
Я мог бы сделать это в PHP, это должно быть проще, но мне интересно, как это сделать в bash.
text-processing
conversion
replace
binary
piotrekkr
источник
источник
\x
во второй строке вашего примера кода есть ошибка, которая отсутствует . Так и должно бытьecho -n $'\x1b\x1f' >> test.txt
.printf "%d" 0x1B1F
отлично выполнит работу, чтобы получить ваш6943
результат; Исходя из этого, вы можете использовать значительно более умную линию, какprintf "%d" $(xxd -u -ps -l 2 -s 12 test.txt)
вместо этого, и вам больше не понадобитсяbc
.Ой, извини. Этот ответ устарел, потому что я думал, что в вашем файле есть шестнадцатеричные значения, записанные как ascii.
Вы можете преобразовать шестнадцатеричные числа в десятичную систему через
printf "%d" 0x1B1F
.Если вы сохранили байты в переменной,
BYTES=1B1F
вы получите результат с помощьюprintf "%d" 0x$BYTES
.Итак, если вы хотите увеличить число, сделайте
Тогда конвертируй обратно
источник