2015-11-19 6 views
1

Существующие решения, такие как echo -e equivalent in Windows?, предоставляют простые методы для ASCII 32-126 и CharLib, которые довольно велики и поэтому не подходят для включения внутри небольшого пакетного файла.Написание кодов символов, отличных от ASCII, до двоичного файла

Есть ли простой способ записи последовательности символов, представленных шестнадцатеричными кодами в диапазоне 00-255, например 05 75 9a FF в двоичный файл?

+0

Как вы вводите такие двоичные данные, и как вы его используете? – Claudio

+0

Я хочу создать двоичный файл. Я попробовал команду echo. Он всегда записывает шестнадцатеричный код символа в файл. Если я напишу 24 в файл и hexdump файл, я должен получить только 24 - это требование. Если я использую echo 24 и hexdump файл, я получаю 32 34, соответствующий ascii-кодам '2' и '4'. Я просто хочу создать шестнадцатеричный заголовок для моего изображения. У меня есть шестнадцатеричный файл и вы хотите добавить к нему заголовок, как волшебное число. И это я должен сделать с помощью пакетного сценария. – Akshaya

+0

Что делать, если я хочу ввести шестнадцатеричные значения вне диапазона набора символов ASCII? – Akshaya

ответ

3

Написание не-ASCII-кодов 80-FF сложно. Я не видел простого решения, прежде чем это так.

Использование:

@echo off 
call :writeHex "30 31 32 9F 00 a0 FF" "outputfile.bin" 
exit /b 

или

@echo off 
call :writeHex 3031329F00a0FF "outputfile.bin" 
exit /b 

Функция:

:writeHex 
rem Usage: 
rem call :writeHex 3031329F00a0FF "outputfile.bin" 
rem call :writeHex "30 31 32 9F 00 a0 FF" "outputfile.bin" 
    findstr /r "^[^a-z]*:::" "%~f0" >"%temp%\writebin.vbs" 
    cscript //nologo "%temp%\writebin.vbs" "%~1" "%~2" 
    del "%temp%\writebin.vbs" 
    exit /b 

    :::hx = replace(wscript.arguments(0)," ","") 
    :::file = wscript.arguments(1) 
    ::: 
    :::length = len(hx)/2 : if length mod 2 then hx = hx & "00" 
    ::: 
    :::s = "" 
    :::for i=1 to len(hx) step 4 
    ::: s = s & chrW(clng("&H" & mid(hx,i,2)) + clng("&H" & mid(hx,i+2,2)) * 256) 
    :::next 
    ::: 
    :::typeBin = 1 : typeText = 2 : bOverwrite = 2 
    :::with CreateObject("ADODB.Stream") 
    ::: .type = typeText : .open : .writeText s : .saveToFile file, bOverwrite : .close 
    ::: .type = typeBin : .open : .loadFromFile file : .position = 2 : data = .read(length) 
    ::: .position = 0 : .write data 
    ::: .position = length : .setEOS 
    ::: .saveToFile file, bOverwrite 
    ::: .close 
    :::end with 
Смежные вопросы