Título: hex a string pero rapido, es posible? Publicado por: Fucko en 22 Julio 2022, 05:04 am Hola, estoy intentando hacer hex to string, leyendo un fichero desde disco, pero el inconveniente, es que tarda muchisimo... funciona bien, pero tarda una eternidad, en un archivo de 3 megas por ejemplo....
el code es este: Código: Public Function HexToString(ByVal HexToStr As String) As String funcionar, funciona, pero tarda una eternidad.... el soft cyberchef (https://gchq.github.io/CyberChef/) la misma funcion, que sería "from hex" hace lo mismo y tarda 2 segundos en hacerlo... alguna idea que se puede mejorar? gracias saludos Título: Re: hex a string pero rapido, es posible? Publicado por: EdePC en 22 Julio 2022, 17:22 pm Debe ser porque estas leyendo todo de una, tienes que hacerlo de dos en dos caracteres hexadecimales, luego convertirlos al caracter de texto que representan y escribirlo en el archivo de salida, por ejemplo:
Código
Título: Re: hex a string pero rapido, es posible? Publicado por: Fucko en 22 Julio 2022, 20:51 pm Hola, ese code es para vb6?
el code que puse, creo que eso hace, lee de 2 en 2 y los transforma, pero tarda eternidad en ficheros grandes. el soft cyberchef, hace exactamente lo mismo, pero tarda 2 segundos en hacerlo. no creo que los lea de 2 en 2, sino tardaría lo mismo... no lo sé, intentaré contactar al autor. voy a intentar ver ese code, aunque se me hace que es .net :D gracias EDIT: este es el code del cyberchef que hace lo mismo que intento en mi code, pero en menos de 2 segundos https://github.com/gchq/CyberChef/blob/master/src/core/operations/FromHex.mjs Título: Re: hex a string pero rapido, es posible? Publicado por: EdePC en 23 Julio 2022, 03:41 am Nop, es .Net, pero en VB6 es todavía más fácil, para este caso debería bastar Input y Print
Código
Como ya te comenté, el problema que tienes es que estás cargando tooodo el contenido del archivo a la vez (ReadFileIntoString = ts.ReadAll) Si quieres usar los TextStream como en tu código: Código
La idea es siempre tomar de dos en dos los caracteres y nunca todos a la vez, si los tomas todos a la vez y luego de ahí los tomas de dos no vale porque ya has sobrecargado al programa previamente. Título: Re: hex a string pero rapido, es posible? Publicado por: Fucko en 24 Julio 2022, 00:16 am Muchas gracias!!!
la velocidad ahora es como el soft cyberchef, con el primer ejemplo de code tarda 2 segundos... solo que me da error, que ahora estoy de salida, pero lo veré al volver.... error 62 la entrada de datos ha sobrepasado el final del archivo Código: Print #2, Chr(Val("&H" & Input(2, #1))); pero como digo, con un poco de filtro quedará bien :) (EDIT: On error resume next sirvió para el primer error, ambos codes generan mismo archivo, solo que como dije, el primero tarda 2 segundos, el segundo entre 20 y 30) el segundo code, también funciona, solo que toma más tiempo, en el mismo archivo, tomará unos 30 segundos... y no arroja error el code que yo estaba usando anteriormente, tardaba más de 1 hora y no se hasta donde, porque lo corté... pero 1 hora ha llegado a estar luego con un poco más de tiempo lo reviso nuevamente, muchisimas gracias!!! Título: Re: hex a string pero rapido, es posible? Publicado por: Fucko en 25 Agosto 2022, 22:37 pm Buenas, como va? aquí de nuevo, la verdad, me da pena volver a preguntar, con la tremenda ayuda que me han dado...
estoy teniendo problemas con la conversión, el code tiene problemas para convertir, o eso parece. adjunto fotos de como se debería ver y quedar, y como me queda a mi.... texto a convertir: (https://i.imgur.com/dMhHdus.png) En vista hexadecimal, tiene otros caracteres, antes del texto plano, que son los que hacen el problema (https://i.imgur.com/REuoWV4.png) la salida correcta que me da el cyberchef y funciona, es: (https://i.imgur.com/yIZBzD0.png) y el code, a mi me genera esto: (https://i.imgur.com/TY5xCfy.png) si en el texto, yo borro a "EF BB BF" el codigo funciona... al perecer, todos los txt que se necesitan convertir, tienen eso antes del texto plano... como podría solucionar ese problema? el code usado es: Código: Private Sub Command1_Click() muchisimas gracias y perdon :/ Título: Re: hex a string pero rapido, es posible? Publicado por: EdePC en 26 Agosto 2022, 03:52 am EF BB BF es para identificar a un archivo bajo la codificación UTF-8 con BOM, justo esos tres bytes son las constantes del BOM o Signature. Un lector de texto debería ser capaz de leer esos tres bytes para entender de que el archivo viene codificado con UTF-8, luego obviar ese BOM y mostrar el contenido del archivo como se debe.
Esos 3 bytes están causando el problema, la manera más sencilla sería tomar los 3 primeros bytes ("caracteres") y compararlos con la constante del BOM EF BB BF, si no es igual entonces significa que no tiene BOM y devolvemos el cursor de lectura al inicio: Código
Título: Re: hex a string pero rapido, es posible? Publicado por: Fucko en 26 Agosto 2022, 20:32 pm Muchisimas gracias!!
anoche, ví el msj y era otro, y no lo había guardado, porque era madrugada aca ejjeje yo no sabía como hacer el filtro, porque si ponía que buscara en el input, por algunos de esos bytes, y me los cambiara por otro valor conocido y funcional, eso me lo iba a hacer en todo el input, y yo solo necesitaba los 3 primeros bytes nomás comparar... me has salvado!!! estoy muy agradecido... me gustaría invitarte una coca, cerveza, café o lo que sea, tenes alguna manera de que te haga llegar una colaboración? |