Autor
|
Tema: hex a string pero rapido, es posible? (Leído 4,010 veces)
|
Fucko
Desconectado
Mensajes: 239
Fucko the Clown Rules!!!
|
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: Public Function HexToString(ByVal HexToStr As String) As String Dim strTemp As String Dim strReturn As String Dim I As Long For I = 1 To Len(HexToStr) Step 2 strTemp = Chr$(Val("&H" & Mid$(HexToStr, I, 2))) strReturn = strReturn & strTemp Next I HexToString = strReturn End Function
Public Function ReadFileIntoString(strFilePath As String) As String
Dim fso As New FileSystemObject Dim ts As TextStream
Set ts = fso.OpenTextFile(strFilePath) ReadFileIntoString = ts.ReadAll
End Function
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
|
|
« Última modificación: 22 Julio 2022, 20:54 pm por Fucko »
|
En línea
|
Cree en los que buscan la verdad, duda de los que la han encontrado...
|
|
|
EdePC
|
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: Sub Main() Dim sr As New System.IO.StreamReader("hex.txt") Dim sw As New System.IO.StreamWriter("txt.txt") Dim hex(2) As Char While sr.Read(hex, 0, 2) sw.Write(Chr(Val("&H" & hex))) End While sr.Close() sw.Close() End Sub
|
|
|
En línea
|
|
|
|
Fucko
Desconectado
Mensajes: 239
Fucko the Clown Rules!!!
|
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 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
|
|
« Última modificación: 22 Julio 2022, 20:59 pm por Fucko »
|
En línea
|
Cree en los que buscan la verdad, duda de los que la han encontrado...
|
|
|
EdePC
|
Nop, es .Net, pero en VB6 es todavía más fácil, para este caso debería bastar Input y Print Private Sub Command1_Click() Open "hex.txt" For Input As #1 Open "txt.txt" For Output As #2 Do While Not EOF(1) Print #2, Chr(Val("&H" & Input(2, #1))); Loop Close #1 Close #2 End Sub
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: Private Sub Command1_Click() Dim strFileInputPath As String Dim strFileOutputPath As String strFileInputPath = "hex.txt" strFileOutputPath = "txt.txt" Set fso = CreateObject("Scripting.FileSystemObject") Set tsi = fso.OpenTextFile(strFileInputPath) Set tso = fso.CreateTextFile(strFileOutputPath) Dim strHex As String Dim strTex As String Do While Not tsi.AtEndOfStream strHex = tsi.Read(2) strTex = Chr(Val("&H" & strHex)) tso.write strTex Loop tsi.Close tso.Close End Sub
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.
|
|
|
En línea
|
|
|
|
Fucko
Desconectado
Mensajes: 239
Fucko the Clown Rules!!!
|
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 Print #2, Chr(Val("&H" & Input(2, #1))); y los primero bytes, los da en 00 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!!!
|
|
« Última modificación: 24 Julio 2022, 00:35 am por Fucko »
|
En línea
|
Cree en los que buscan la verdad, duda de los que la han encontrado...
|
|
|
Fucko
Desconectado
Mensajes: 239
Fucko the Clown Rules!!!
|
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: En vista hexadecimal, tiene otros caracteres, antes del texto plano, que son los que hacen el problema la salida correcta que me da el cyberchef y funciona, es: y el code, a mi me genera esto: 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: Private Sub Command1_Click() Open "hex.txt" For Input As #1 Open "txt.txt" For Output As #2 Do While Not EOF(1) Print #2, Chr(Val("&H" & Input(2, #1))); Loop Close #1 Close #2 End Sub muchisimas gracias y perdon :/
|
|
« Última modificación: 25 Agosto 2022, 23:10 pm por Fucko »
|
En línea
|
Cree en los que buscan la verdad, duda de los que la han encontrado...
|
|
|
EdePC
|
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: Private Sub btn_Hex2Text_InOut_Click() Open "hex.txt" For Input As #1 Open "txt.txt" For Output As #2 If Input(3, #1) <> Chr(&HEF) & Chr(&HBB) & Chr(&HBF) Then Seek #1, 1 Do While Not EOF(1) Print #2, Chr(Val("&H" & Input(2, #1))); Loop Close #1 Close #2 End Sub
|
|
« Última modificación: 26 Agosto 2022, 09:17 am por EdePC »
|
En línea
|
|
|
|
Fucko
Desconectado
Mensajes: 239
Fucko the Clown Rules!!!
|
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?
|
|
|
En línea
|
Cree en los que buscan la verdad, duda de los que la han encontrado...
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
es posible un cast de Integer a String en JAVA
Java
|
saifgen
|
5
|
20,310
|
2 Diciembre 2005, 04:17 am
por DarkSatriani
|
|
|
Búsqueda lo más rápida posible de varios caracteres en un string
.NET (C#, VB.NET, ASP)
|
BlaineMonkey
|
2
|
3,251
|
10 Febrero 2010, 19:06 pm
por BlaineMonkey
|
|
|
Ayuda sobre un tema de LINSET (Soy Nuevo :) )
Wireless en Linux
|
barandica0
|
6
|
6,314
|
4 Julio 2017, 22:32 pm
por barandica0
|
|
|
Sí, es posible: un ordenador antiguo puede sentirse más rápido que uno moderno
Noticias
|
wolfbcn
|
1
|
2,549
|
26 Diciembre 2017, 21:48 pm
por crazykenny
|
|
|
Chrome está a punto de ser más rápido y seguro, pero ¿a costa de qué?
Noticias
|
wolfbcn
|
0
|
1,292
|
18 Febrero 2019, 01:42 am
por wolfbcn
|
|