Преобразовать шестнадцатеричный дамп файла в двоичный (программный) файл в Windows?
У меня есть шестнадцатеричный файл, который я пытаюсь преобразовать в двоичный файл. Я выполнил это в Linux перед использованием команды:
xxd -r -p mykey.hex > mykey.bin
Но я не могу понять, как сделать эту же команду в Windows. Я скачал несколько инструментов шестнадцатеричного редактора, но не совсем уверен, как их использовать для преобразования шестнадцатеричного в двоичное представление.
Есть ли способ сделать это в Windows, или есть подобные инструменты, которые позволили бы мне сделать это?
9 ответов
Есть родной порт xxd для Win32.
Смотрите unxutils здесь для загрузки.
Другой источник Win32 портов общих утилит GNU и / или *nix - это GnuWin32.
VIM 7.x содержит xxd для Windows
https://ftp.nluug.nl/pub/vim/pc/gvim73_46_s.zip
C:\Program Files (x86)\Vim\vim74>.\xxd -v
xxd V1.10 27oct98 by Juergen Weigert (Win32)
C:\Program Files (x86)\Vim\vim74>dir xxd.exe
10/08/2013 12:33 PM 70,144 xxd.exe
C:\Program Files (x86)\Vim\vim74>file xxd.exe
xxd.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit
Cygwin также имеет один
C:\cygwin\bin>.\xxd.exe -v
xxd V1.10 27oct98 by Juergen Weigert
C:\cygwin\bin>dir xxd.exe
18/09/2015 05:44 AM 18,963 xxd.exe
C:\cygwin\bin>file xxd.exe
xxd.exe: PE32+ executable (console) x86-64, for MS Windows
Используйте команду powershell format-hex:
PS C:\path\path\Documents\blah> format-hex Util3.class
Path: C:\blah\blah\Documents\blah\Util3.class
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 CA FE BA BE 00 00 00 34 00 1F 0A 00 07 00 10 09 Êþº¾...4........
etc...
Чтобы преобразовать шестнадцатеричную строку в двоичный файл, это работает в PowerShell Core 7.2.1:
$hex_string = '48656C6C6F2C20576F726C6421'
$hex_string_spaced = $hex_string -replace '..', '0x$& '
$byte_array = [byte[]] -split $hex_string_spaced
Set-Content -Path 'out.bin' -Value $byte_array -AsByteStream
Эта последняя строка не будет работать в PowerShell 5.1, но вместо этого вы можете сделать следующее:
Set-Content -Path 'out.bin' -Value $byte_array -Encoding Byte
PowerShell поставляется с предустановленной Windows.
WinHex - лучший способ запустить глупую команду DOS.
- Открыть Hex файл
- Редактировать >> Файл конвертера
- В диалоговом окне выберите Intel Hex to Binary.
- Нажмите кнопку ОК.
- Размер файла округления? Нажмите Нет.
- Сохранить файл как бен.
Если вы сошли с ума, вы можете попробовать обработать символы с помощью ввода, а затем вывести значения по 8 бит за раз, используя язык программирования.
Я написал это на C и протестировал в Cygwin.
Использование:
gcc stdin_hex_to_stdout_bin.c -o stdin_hex_to_stdout_bin
echo '48656C6C6F2C20576F726C6421' | ./stdin_hex_to_stdout_bin
cat some_hex_text_file.txt | ./stdin_hex_to_stdout_bin
stdin_hex_to_stdout_bin.c
#include <stdio.h>
#include <stdbool.h>
int input_char_to_mask(int input_char);
int main() {
int inputc;
int outputc;
int outputmask;
int mask;
bool high = false;
do {
inputc = getc(stdin);
outputmask = input_char_to_mask(inputc);
if (outputmask != 0xFF) {
if (!high) {
outputc = outputmask * 16;
} else {
outputc = outputc | outputmask;
putc(outputc, stdout);
}
high = !high;
}
} while (inputc != EOF);
return 0;
}
int input_char_to_mask(int input_char) {
switch (input_char) {
case '0': return 0x00;
case '1': return 0x01;
case '2': return 0x02;
case '3': return 0x03;
case '4': return 0x04;
case '5': return 0x05;
case '6': return 0x06;
case '7': return 0x07;
case '8': return 0x08;
case '9': return 0x09;
case 'A': return 0x0A;
case 'B': return 0x0B;
case 'C': return 0x0C;
case 'D': return 0x0D;
case 'E': return 0x0E;
case 'F': return 0x0F;
case 'a': return 0x0A;
case 'b': return 0x0B;
case 'c': return 0x0C;
case 'd': return 0x0D;
case 'e': return 0x0E;
case 'f': return 0x0F;
default : return 0xFF;
}
}
Используйте этот преобразованный hex в bin: (работает в браузере, установка программного обеспечения не требуется)
Вы можете использовать бесплатное программное обеспечение Mcumall GQ4X без программатора. Выберите устройство и загрузите шестнадцатеричный файл. Сохранить как файл bin и все.