transformar HEX a ACSII en bat, es posible?

Iniciado por carlosguay, 8 Diciembre 2009, 20:52 PM

0 Miembros y 1 Visitante están viendo este tema.

carlosguay

Vereis llevo mucho tiempo liado com este bat y ya no se donde leer mas, o si es posible lo que yo necesito o no.

Tengo unos archivos de texto que estan en HEX, y cuando los manipule, necesito pasarlos a ACSII, para poder convertirlos en bin, ya que para meterlos en el la flash del aparato, pues tienen  que ser bin, claro.

En mi loca aventura, pues no se me a ocurrido, namas que hacerme yo mismo un convertidor a acssi, osea esto.

Citar@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type texto1.txt') do (
set linea=%%x
set linea=!linea:00=.!
set linea=!linea:01=!
set linea=!linea:02=!
set linea=!linea:03=!
set linea=!linea:04=!
set linea=!linea:05=!
set linea=!linea:06=!
set linea=!linea:07=!
set linea=!linea:08=!
set linea=!linea:09=   !
set linea=!linea:0A=.!
set linea=!linea:0B=.!
set linea=!linea:0C=.!
set linea=!linea:0D=.!
set linea=!linea:0E=!
set linea=!linea:0F=!
set linea=!linea:10=!
set linea=!linea:11=!
set linea=!linea:12=!
set linea=!linea:13=!
set linea=!linea:14=!
set linea=!linea:15=!
set linea=!linea:16=!
set linea=!linea:17=!
set linea=!linea:18=!
set linea=!linea:19=!
set linea=!linea:1A=.!
set linea=!linea:1B=!
set linea=!linea:1C=!
set linea=!linea:1D=!
set linea=!linea:1E=!
set linea=!linea:1F=!
set linea=!linea:20=^!
set linea=!linea:21=.!
set linea=!linea:22="!
set linea=!linea:23=#!
set linea=!linea:24=$!
set linea=!linea:25=.!
set linea=!linea:26=.!
set linea=!linea:27='!
set linea=!linea:28=(!
set linea=!linea:29=^)!
set linea=!linea:2A=*!
set linea=!linea:2B=+!
set linea=!linea:2C=,!
set linea=!linea:2D=-!
set linea=!linea:2E=.!
set linea=!linea:2F=.!
set linea=!linea:30=0!
set linea=!linea:31=1!
set linea=!linea:32=2!
set linea=!linea:33=3!
set linea=!linea:34=4!
set linea=!linea:35=5!
set linea=!linea:36=6!
set linea=!linea:37=7!
set linea=!linea:38=8!
set linea=!linea:39=9!
set linea=!linea:3A=:!
set linea=!linea:3B=;!
set linea=!linea:3C=.!
set linea=!linea:3D==!
set linea=!linea:3E=.!
set linea=!linea:3F=?!
set linea=!linea:40=@!
set linea=!linea:41=A!
set linea=!linea:42=B!
set linea=!linea:43=C!
set linea=!linea:44=D!
set linea=!linea:45=E!
set linea=!linea:46=F!
set linea=!linea:47=G!
set linea=!linea:48=H!
set linea=!linea:49=I!
set linea=!linea:4A=J!
set linea=!linea:4B=K!
set linea=!linea:4C=L!
set linea=!linea:4D=M!
set linea=!linea:4E=N!
set linea=!linea:4F=O!
set linea=!linea:50=P!
set linea=!linea:51=Q!
set linea=!linea:52=R!
set linea=!linea:53=S!
set linea=!linea:54=T!
set linea=!linea:55=U!
set linea=!linea:56=V!
set linea=!linea:57=W!
set linea=!linea:58=X!
set linea=!linea:59=Y!
set linea=!linea:5A=Z!
set linea=!linea:5B=[!
set linea=!linea:5C=\!
set linea=!linea:5D=]!
set linea=!linea:5E=.!
set linea=!linea:5F=_!
set linea=!linea:60=`!
set linea=!linea:61=a!
set linea=!linea:62=b!
set linea=!linea:63=c!
set linea=!linea:64=d!
set linea=!linea:65=e!
set linea=!linea:66=f!
set linea=!linea:67=g!
set linea=!linea:68=h!
set linea=!linea:69=i!
set linea=!linea:6A=j!
set linea=!linea:6B=k!
set linea=!linea:6C=l!
set linea=!linea:6D=m!
set linea=!linea:6E=n!
set linea=!linea:6F=o!
set linea=!linea:70=p!
set linea=!linea:71=q!
set linea=!linea:72=r!
set linea=!linea:73=s!
set linea=!linea:74=t!
set linea=!linea:75=u!
set linea=!linea:76=v!
set linea=!linea:77=w!
set linea=!linea:78=x!
set linea=!linea:79=y!
set linea=!linea:7A=z!
set linea=!linea:7B={!
set linea=!linea:7C=^|!
set linea=!linea:7D=}!
set linea=!linea:7E=~!
set linea=!linea:7F=!
set linea=!linea:80=€!
set linea=!linea:81=!
set linea=!linea:82=,!
set linea=!linea:83=ƒ!
set linea=!linea:84=,,!
set linea=!linea:85=...!
set linea=!linea:86=†!
set linea=!linea:87=‡!
set linea=!linea:88=ˆ!
set linea=!linea:89=‰!
set linea=!linea:8A=Š!
set linea=!linea:8B=‹!
set linea=!linea:8C=Œ!
set linea=!linea:8D=!
set linea=!linea:8E=Ž!
set linea=!linea:8F=!
set linea=!linea:90=!
set linea=!linea:91='!
set linea=!linea:92='!
set linea=!linea:93="!
set linea=!linea:94="!
set linea=!linea:95=•!
set linea=!linea:96=–!
set linea=!linea:97=—!
set linea=!linea:98=˜!
set linea=!linea:99=™!
set linea=!linea:9A=š!
set linea=!linea:9B=›!
set linea=!linea:9C=œ!
set linea=!linea:9D=!
set linea=!linea:9E=ž!
set linea=!linea:9F=Ÿ!
set linea=!linea:A0= !
set linea=!linea:A1=¡!
set linea=!linea:A2=¢!
set linea=!linea:A3=£!
set linea=!linea:A4=¤!
set linea=!linea:A5=¥!
set linea=!linea:A6=¦!
set linea=!linea:A7=§!
set linea=!linea:A8=¨!
set linea=!linea:A9=©!
set linea=!linea:AA=ª!
set linea=!linea:AB=«!
set linea=!linea:AC=¬!
set linea=!linea:AD=­!
set linea=!linea:AE=®!
set linea=!linea:AF=¯!
set linea=!linea:B0=°!
set linea=!linea:B1=±!
set linea=!linea:B2=²!
set linea=!linea:B3=³!
set linea=!linea:B4=´!
set linea=!linea:B5=µ!
set linea=!linea:B6=¶!
set linea=!linea:B7=·!   
set linea=!linea:B8=¸!
set linea=!linea:B9=¹!
set linea=!linea:BA=º!
set linea=!linea:BB=»!
set linea=!linea:BC=¼!
set linea=!linea:BD=½!
set linea=!linea:BE=¾!
set linea=!linea:BF=¿!
set linea=!linea:C0=À!
set linea=!linea:C1=Á!
set linea=!linea:C2=!
set linea=!linea:C3=Ã!
set linea=!linea:C4=Ä!
set linea=!linea:C5=Å!
set linea=!linea:C6=Æ!
set linea=!linea:C7=Ç!
set linea=!linea:C8=È!
set linea=!linea:C9=É!
set linea=!linea:CA=Ê!
set linea=!linea:CB=Ë!
set linea=!linea:CC=Ì!
set linea=!linea:CD=Í!
set linea=!linea:CE=Î!
set linea=!linea:CF=Ï!
set linea=!linea:D0=Ð!
set linea=!linea:D1=Ñ!
set linea=!linea:D2=Ò!
set linea=!linea:D3=Ó!
set linea=!linea:D4=Ô!
set linea=!linea:D5=Õ!
set linea=!linea:D6=Ö!
set linea=!linea:D7=×!
set linea=!linea:D8=Ø!
set linea=!linea:D9=Ù!
set linea=!linea:DA=Ú!
set linea=!linea:DB=Û!
set linea=!linea:DC=Ü!
set linea=!linea:DD=Ý!
set linea=!linea:DE=Þ!
set linea=!linea:DF=ß!
set linea=!linea:E0=à!
set linea=!linea:E1=á!
set linea=!linea:E2=!
set linea=!linea:E3=ã!
set linea=!linea:E4=ä!
set linea=!linea:E5=å!
set linea=!linea:E6=æ!
set linea=!linea:E7=ç!
set linea=!linea:E8=è!
set linea=!linea:E9=é!
set linea=!linea:EA=ê!
set linea=!linea:EB=ë!
set linea=!linea:EC=ì!
set linea=!linea:ED=í!
set linea=!linea:EE=î!
set linea=!linea:EF=ï!
set linea=!linea:F0=ð!
set linea=!linea:F1=ñ!
set linea=!linea:F2=ò!
set linea=!linea:F3=ó!
set linea=!linea:F4=ô!
set linea=!linea:F5=õ!
set linea=!linea:F6=ö!
set linea=!linea:F7=÷!
set linea=!linea:F8=ø!
set linea=!linea:F9=ù!
set linea=!linea:FA=ú!
set linea=!linea:FB=û!
set linea=!linea:FC=ü!
set linea=!linea:FD=ý!
set linea=!linea:FE=þ!
set linea=!linea:FF=.!
call :show !linea!
)
goto:eof
:show
echo %* >> texto2.txt
goto:eof

Ya se que esto esta mal hecho, pero me lo he currado de gordo, dos dias para eso que os pongo, espero le sirva a alguien, xd.

Como veis faltan muchos caracteres y es porque en un bat, no se pueden poner, osea la consola de msdos los interpreta como suyos y hasta aqui hemos llegado.
Segun tengo leido, tiene que hacerse por java o algo asin.

Pues mi problema es ese, si alguien me puede ayudar a convertir archivos de texto de HEX a ACSII, pues se lo agradecería mucho.

Aunque fuera en vbs, y que desde un bat ejecutarlo o algo asin.

Aunque voy a hacer este post algo largo, queria dejar claro lo que necesito.
Yo tengo un archivo de texto asin.

Citar68 a1 22 a3   00 e3 18 d9   a7 9e c5 e9   c2 9b 6c f3
  1c df 27 92   8e aa ab c5   d4 e4 b0 15   bb df f6 7e 
  89 03 bd cd   87 a8 e9 ac   f1 79 c2 d6   ac 8c 37 f5 
  99 75 9e 4e   5d e9 20 22   87 e9 46 28   11 ba ea 5c 
  2c 3f f8 9b   a9 a0 b5 fd   a5 5b cd 2f   9c 01 64 9e 
  04 5f 54 54   9d 83 ca 52   fb 5b 15 83   3f b1 1c 9d 
  a7 ca e6 61   a4 88 78 80   3b be cc 95   74 21 02 41
  00 fe 37 a7   11 b1 0a 69   6b 85 c8 28   74 d5 03 c6

Cuando lo manipule, necesito ponerlo asin, para poder pasarlo a un archivo bin.

Citar68 a1 22 a3   00 e3 18 d9   a7 9e c5 e9   c2 9b 6c f3  | h."...........l.
  1c df 27 92   8e aa ab c5   d4 e4 b0 15   bb df f6 7e  | ..'............~
  89 03 bd cd   87 a8 e9 ac   f1 79 c2 d6   ac 8c 37 f5  | .........y....7.
  99 75 9e 4e   5d e9 20 22   87 e9 46 28   11 ba ea 5c  | .u.N]. "..F(...\
  2c 3f f8 9b   a9 a0 b5 fd   a5 5b cd 2f   9c 01 64 9e  | ,?.......[./..d.
  04 5f 54 54   9d 83 ca 52   fb 5b 15 83   3f b1 1c 9d  | ._TT...R.[..?...
  a7 ca e6 61   a4 88 78 80   3b be cc 95   74 21 02 41  | ...a..x.;...t!.A
  00 fe 37 a7   11 b1 0a 69   6b 85 c8 28   74 d5 03 c6  | ..7....ik..(t...

Pues si alguien save lo que necesito, se lo agradecería mucho.

saludos

leogtz

No, no hay manera sin utilizar otros programas, tal vez en VBS se pueda, espera a Novlucker.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Novlucker

#2
La conversión hexadecimal-decimal en vbs es muy sencilla, y partiendo de una línea de tu archivo no es complicado obtener el resultado que buscas :P

Ej:
Código (vb) [Seleccionar]
Linea = Replace("68 a1 22 a3   00 e3 18 d9   a7 9e c5 e9   c2 9b 6c f3 "," ","")
For i = 1 to Len(Linea) step 2
Dec = Cint("&h" & Mid(Linea, i, 2))
if Dec > 126 or Dec < 33 then
Ascii = Ascii & "."
Else
Ascii = Ascii & Chr(Dec)
End if
Next

Msgbox Ascii


Ahora el problema, escribir un binario con el vbs :-\.

En tu caso tomaría el método sencillo, te consigues un editor hexadecimal y luego copias y pegas los valores hexadecimales :P

Además creo que hay una confusión, si abres un archivo binario con un editor hexadecimal te lo mostrará tal cual lo quieres poner, no se genera un archivo así, así se visualiza

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

carlosguay

Gracias Novlucker.

Creo que no me e explicado bien, veras yo tengo archivos como el que te he puesto, que los saco asin tal como estan, osea en HEX.

Esos datos los tengo que modificar, osea tengo que  cambiar muchos bytes y creo que sera mucha mas sencillo, estando como estan que si tuvieran la parte de acsii.

Como digo mas arriba saco los archivos com un bat, ya que mis conocimientos son muy limitados=nulos, sobre programacion.

Cuando los manipule, para volver a meterlos necesito convertirlos en archivo bin, que eso seria tan facil como guardarlos x.bin.

Como tu bien dices, el archivo bin al editarlo se muestra tal cual, osea como lo hallas guardao, pero siempre se guarda en la parte de acsii, osea asin.



Como ves tanto editandolo como hex o acsii, estan malamente ya que aunque el acsii si se escribe bien pero los bytes los cambia porque interpreta todos los puntos como tal osea, 2E.

Por eso me hice ese conversor que pongo arriba y que es lo que realmente necesito, que al guardarlo en archivo bin, se pongan los bytes correctos.

Veras el motivo principal es que son muchos archivos y queria hacerlo todo desde el bat o almenos un editor o un programita en exe, o algo asin que pudiera ejecutarlo desde el bat, que lio no.

El codigo que me pones creo que es lo que necesito, aunque si tiene que ser linea por linea, pudiera al menos con el bat ir cambindola y guardando cada linea, claro.

Y aunque creo que es mucho pedir, ese codigo que me pones como se compila?

Te agradezco la ayuda y espero lo entiendas.

saludos

Novlucker

A ver si entiendo, pero entonces lo que tu quieres es regenerar otra vez el binario del cual se extrajeron los hexadecimales.

Por poner un ejemplo, tienes el calc.exe y con el Hex Workshop generas el archivo de texto con los valores hexadecimales de cada byte, pero luego quieres generar nuevamente un binario de ese texto.

Si es así, no recuerdo una tool específica para esto, pero más tarde te puedo dejar alguna improvisada que cumpla la función, en VB o Sharp dependiendo del compilador al que tenga acceso primero :xD



Con respecto a lo anterior, el código que te he dejado es un vbs, así que solo tienes que pegarlo en el notepad y guardarlo con extensión vbs

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

carlosguay

Creo que ahora me as entendido, pero para que quede mas claro.

Yo tengo un editor el Winhex, que transforma los bytes en acsii perfectamente, pero el problema es que queria manipularlo desde el bat, osea un exe que lo ejecute y solo me haga el trabajo sin tener que estar archivo por archivo com el editor que tengo.

Eso es exactamente lo que necesito, algo que pueda automatizar la tarea.

Creo que el codigo que me as puesto, casi seria lo que necesito.

<< Lucas, ¿quién más? >>

La verdad es que hace mucho tiempo que no veo algo de batch, pero creo que por ahí tengo un código con conversiones de este tipo, pero voy a revisar el disco cuando consiga un micro porque se me quemó un día de tormena eléctrica. :P

Saludos.


Personalmente, prefiero tecnologías de Microsoft. Yo reconozco que defendí el software libre, pero ahora yo quiero vivir de esto. Mi trabajo.

Meta

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

#8
Bueno, al final no use ni VB ni C#, te dejo un par de perl scripts
Para descargar el interprete en caso de que no lo tengas ... :http://www.perl.org/get.html

He creado dos scripts, bin2hex y hex2bin

bin2hex
Código (perl) [Seleccionar]
my $tiempoe= time();
@files=<files/*>;

foreach $file (@files)
{
open(BIN, "<$file");
binmode(BIN);
my $buffer="";
read(BIN, $buffer, -s BIN, 0);
close(BIN);
open(BHEX,">Hex".$file.".txt")||die "No se puede crear el archivo Hex".$file.".txt\n";

foreach (split(//, $buffer))
{
my $formato=sprintf("%02x", ord($_));
print BHEX $formato." ";
}
close(BHEX);
}

my $tiempot = time()-$tiempoe;
print "Proceso Terminado\n";
print "Tiempo insumido: $tiempot seg.\n";


Para usar este script debes de tener una carpeta de nombre files en el mismo directorio. Dentro de esta carpeta van los archivos binarios que serán pasados a hexadecimal.
Además debes de tener una carpeta de nombre hexfiles, que es donde serán creados archivos de texto por cada binario convertido.

El contenido de cada txt será algo así:

Citar4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00 b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0 00 00 00 0e 1f ba 0e 00 b4 09 cd 21 b8 01 4c cd 21 54 68 69 73 20 70 72 6f 67 72 61 6d 20 63 61 6e 6e 6f 74 20 62 65 20 72 75 6e 20 69 6e 20 44 4f 53 20 6d 6f 64 65 2e 0d 0d 0a 24 00 00 00 00 00 00 00 ec 85 5b a1 a8 e4 35 f2 a8 e4 35 f2 a8 e4 35 f2 6b eb 3a f2 a9 e4 35 f2 6b eb 55 f2 a9 e4 35 f2 6b eb 68 f2 bb e4 35 f2 a8 e4 34 f2 63 e4 35 f2 6b eb 6b f2 a9 e4 35 f2 6b eb 6a f2 bf e4 35 f2 6b eb 6f f2 a9 e4 35 f2 52 69 63 68 a8 e4 35 f2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 45 00 00 4c 01 03 00 c3 7c 10 41 00 00 00 00 00 00 00 00 e0 00 0f 01 0b 01 07 0a 00 78 00 00 00 96

Es decir, los valores hexadecimales "puros" :P

hex2bin
Código (perl) [Seleccionar]
my $tiempoe= time();
@files=<files/*>;

foreach $file (@files)
{
open(BHEX, "<$file");
my $buffer=<BHEX>;
close(BHEX);
open(BIN,">bin".$file.".bin")||die "No se puede crear el archivo bin".$file.".bin\n";
binmode(BIN);

foreach (split(" ", $buffer))
{
my $char=pack("H2",$_);
print BIN $char;
}
close(BIN);
}

my $tiempot = time()-$tiempoe;
print "Proceso Terminado\n";
print "Tiempo insumido: $tiempot seg.\n";


Al igual que el anterior, este script toma los archivos dentro de la carpeta files (archivos en hexadecimal, como los generados por bin2hex), y genera archivos binarios dentro de la carpeta binfiles.

Por poner un ejemplo:
Tienes el notepad.exe y el mspaint.exe dentro de "files", ejecutas el script "bin2hex" y este te generará dos ".txt" dentro de "hexfiles" con el contenido hexadecimal.
Ahora, si quieres convertir esos archivos de texto a binario nuevamente, los metes dentro de "files" y ejecutas "hex2bin", con lo cual se volverán a generar binarios dentro de "binfiles"

Los scripts en si son muy mejorables, pero bueno, espero te sirva y cualquier duda ya sabes ::)

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

carlosguay

Perdona Novlucker, me vas a llamar burro, pero es que como te dije mis conocimientos de programacion som=nulos.

Cuando dices interprete, te refieres al compilador que necesito para perl,?

Es que me he bajado de esa pagina que pones el strawberry-perl y no se si es eso, tiene veintitantos megas y al instalarlo me a creado varios accesos a webs y una ventana de msdos, que supongo que sera para esos comandos.

Pero como se compila ese codigo?, siento mi torpeza, xd.