PDA

Ver la versión completa : Java Ayuda para cambiar carácteres de un texto



Montblancx
28/04/2016, 02:49
Hola!

Estoy haciendo una modificación a una ROM antigua con un editor hexadecimal y necesito cambiar bastante texto. Tengo el equivalente de cada carácter a su byte, entonces lo que quiero hacer es un programa simple que tras escribir unas palabras y darle a enter u otra tecla me devuelva los bytes para no tener que hacer la conversión a mano. Es decir, por ejemplo poner:

¡Hola mundo!

Me devuelva:

E5 87 AE AB A0 7F AC B4 AD A3 AE E7

Y lo pueda copiar al portapapeles.



Sólo sé un poco de Java de varios tutoriales pero hace años que no toco eclipse y no salí de los ejemplos con texto. ¿Alguien me puede ayudar?

pakoito
28/04/2016, 03:09
¿De dónde sale que ¡Hola mundo! sea E5 87 AE AB A0 7F AC B4 AD A3 AE E7?

Si no, googlea "string to hex online" y hay chorrocientas páginas que te lo hacen: http://codebeautify.org/string-hex-converter/cbd7cee3

Java es muy mala herramienta para hacer programas pequeños, te va mejor un python.

PharaOnyx
28/04/2016, 08:25
Esto es trabajo para un one-liner en Perl o shell script, ya que en Java vas a escribir más código "de relleno" que programa en sí (aunque no por ello es mala herramienta). Más que malas herramientas lo que hay son malos programadores

Un saludo, Alex

edito: por si insistes en hacerlo en Java, esto es lo que sale en unos minutillos. El texto entra como primer parámetro por la línea de comandos (estilo ToHex "Hello, World!"), si lo prefieres de otra manera, feel free :)



package meh;

public final class ToHex
{ /* ToHex */

public static final void main(final String[] i_commandLineArguments)
{ /* main */
String input = null;
char[] inputCharacters = {};
StringBuilder output = null;

input = i_commandLineArguments[0];
inputCharacters = input.toCharArray();
output = new StringBuilder();
for (final char character: inputCharacters)
{ /* for */
output.append(String.format("%02x", (int) character));
} /* for */
System.out.println(output);
} /* main */

} /* ToHex */

Nathrezim
28/04/2016, 08:51
En sed

echo '¡Hola mundo!' | sed 's/¡/E5/g
s/H/87/g
s/o/AE/g
s/l/AB/g
s/a/A0/g
s/ /7F/g
s/m/AC/g
s/u/B4/g
s/n/AD/g
s/d/A3/g
s/!/E7/g' | sed 's/.\{2\}/& /g'

hardyx
30/04/2016, 23:24
En Python:


>>> import binascii
>>> binascii.hexlify(b'Hola mundo!')
'486f6c61206d756e646f21'

Montblancx
02/05/2016, 01:04
¿De dónde sale que ¡Hola mundo! sea E5 87 AE AB A0 7F AC B4 AD A3 AE E7?

Si no, googlea "string to hex online" y hay chorrocientas páginas que te lo hacen: http://codebeautify.org/string-hex-converter/cbd7cee3

Java es muy mala herramienta para hacer programas pequeños, te va mejor un python.

Así es como funciona en la ROM que estoy modificando. Usa tiles como letras y cada una tiene su valor, no es ASCII:

80=A
81=B
82=C
83=D
84=E
85=F
86=G
87=H
88=I
89=J

...

A0=a
A1=b
A2=c
A3=d
A4=e
A5=f
A6=g
A7=h
A8=i
A9=j

...

E0='
E3=-
E4=¿
E5=¡
E6=?
E7=!



Etc..


Voy a probar lo que me habéis puesto :D creo que lo que ha puesyo Nathrezim es lo que más se parece a lo que buscaba. No hace falta que sea Java, pero es el único que conozco en caso de tener que escribirlo yo ^^U

PharaOnyx
02/05/2016, 14:51
package meh;

import java.util.HashMap;
import java.util.Map;

public final class ToHex
{ /* ToHex */

private static Map<Character, String> lookupMap = null;

private static final void initializeTable()
{ /* initializeTable */
(ToHex.lookupMap) = new HashMap<Character, String>();
(ToHex.lookupMap).put('A', "80");
(ToHex.lookupMap).put('B', "81");
(ToHex.lookupMap).put('C', "82");
(ToHex.lookupMap).put('D', "83");
// etc.
} /* initializeTable */

public static final void main(final String[] i_commandLineArguments)
{ /* main */
String input = null;
char[] inputCharacters = {};
StringBuilder output = null;

ToHex.initializeTable();
input = i_commandLineArguments[0];
inputCharacters = input.toCharArray();
output = new StringBuilder();
for (final char character: inputCharacters)
{ /* for */
output.append((ToHex.lookupMap).get(Character.valu eOf(character)));
} /* for */
System.out.println(output);
} /* main */

} /* ToHex */


Un saludo, Alex

swapd0
02/05/2016, 15:38
Pues si no es ASCII lo primero que deberías hacer es sacar una tabla con el código que le corresponde a cada letra y despues hacer el programa que use esa tabla para convertir los valores.

Por cierto, si no es ASCII en un editor de disco no se verán los textos, ¿como sabes que lo que estas cambiando es un texto o no?