elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  GZipStream: Problema con numero magico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: GZipStream: Problema con numero magico  (Leído 20,720 veces)
Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
Re: GZipStream: Problema con numero magico
« Respuesta #10 en: 2 Noviembre 2010, 19:04 pm »

Ok, ok! Gracias por los consejos.

Yo programo en Español, no me gusta programar en Ingles, no hace falta, a menos que no sea para mi. Lo que esta en Ingles son codigos que saco de algun lugar, y no los modifico.

Por ahora, voy a seguir con el desarrollo del proyecto, pero lo guardare en un archivo, y utilizare la funcion DecompressFile() y leere el archivo.

Saludos, Sancho.Mazorka    :P


En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Re: GZipStream: Problema con numero magico
« Respuesta #11 en: 3 Noviembre 2010, 05:47 am »

Para descomprimir y comprimir yo uso esto:
http://www.icsharpcode.net/opensource/sharpziplib/

suerte!!!!!!!!!!!!!


En línea

Simplemente .::IT::.
Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
Re: GZipStream: Problema con numero magico
« Respuesta #12 en: 3 Noviembre 2010, 20:38 pm »

Gracias IT, lo estuve viendo, pero no es lo que necesito, yo necesito descomprimir un string, descomprimir un archivo puedo, el problema es con el string  :-(

PD: yo uso VB.NET, aunque no hay drama, convierto el code y listo

Saludos, Sancho.Mazorka    :P
En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
Re: GZipStream: Problema con numero magico
« Respuesta #13 en: 4 Noviembre 2010, 06:44 am »

Encontre este source que comprime el string sample, y luego lo descomprime y devuelve TRUE o FALSE la funcion segun si descomprimio bien o no.

No puedo adaptarlo para que directamente descomprima un string. Me sigue tirando lo de los numeros magicos. Si alguno puede ayudarme a pasarlo les agradeceria mucho.

Código
  1.    Private Function Test() As Boolean
  2.        Dim sample As String = "This is a compression test of microsoft .net gzip compression method and decompression methods"
  3.        Dim encoding As New System.Text.ASCIIEncoding()
  4.        Dim data As Byte() = encoding.GetBytes(sample)
  5.        Dim result As Boolean = False
  6.  
  7.        ' Compress
  8.        Dim cmpStream As New MemoryStream()
  9.        Dim hgs As New GZipStream(cmpStream, CompressionMode.Compress, True)
  10.  
  11.        hgs.Write(data, 0, data.Length)
  12.        hgs.Close()
  13.  
  14.  
  15.        'DeCompress
  16.        Dim cmpData As Byte() = cmpStream.ToArray()
  17.        Dim decomStream As New MemoryStream(cmpData)
  18.  
  19.        data = New Byte(data.Length - 1) {}
  20.        hgs = New GZipStream(decomStream, CompressionMode.Decompress, True)
  21.  
  22.        Dim [step] As Byte() = New Byte(15) {}
  23.        'Instead of 16 can put any 2^x
  24.        Dim outStream As New MemoryStream()
  25.        Dim readCount As Integer
  26.  
  27.        Do
  28.            readCount = hgs.Read([step], 0, [step].Length)
  29.            outStream.Write([step], 0, readCount)
  30.        Loop While readCount > 0
  31.        hgs.Close()
  32.  
  33.        Dim sampleOut As String = encoding.GetString(outStream.ToArray())
  34.        result = [String].Equals(sample, sampleOut)
  35.        Return result
  36.    End Function


Saludos, Sancho.Mazorka    :P
En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Re: GZipStream: Problema con numero magico
« Respuesta #14 en: 4 Noviembre 2010, 06:53 am »

http://es.debugmodeon.com/articulo/c-comprimir-y-descomprimir-un-string-gzipstream

encontre eso espero te sirva no lo eh probado, pero podrias postear tu codigo par revisarlo?
En línea

Simplemente .::IT::.
Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
Re: GZipStream: Problema con numero magico
« Respuesta #15 en: 4 Noviembre 2010, 07:52 am »

Es el mismo ejemplo que yo pase de C# a VB.NET mediante esta web

http://www.developerfusion.com/tools/convert/csharp-to-vb/

pero no funciona, yo subi el proyecto por si alguno quiere verlo.

En mi primer thread esta el codigo ese que vos pasaste (solo la funcion UnZip)


Saludos, Sancho.Mazorka    :P
« Última modificación: 4 Noviembre 2010, 08:03 am por Sancho.Mazorka » En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


akerbeltza

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: GZipStream: Problema con numero magico
« Respuesta #16 en: 5 Noviembre 2010, 21:16 pm »

En tu primer comentario dices que el número mágico son los primeros bytes de todo archivo. Tu intentas descomprimir una cadena.
Es posible que el error te lo dé porque la cadena no tiene esos primeros bytes?
Espero no haber dicho ninguna tonteria.
En línea

Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
Re: GZipStream: Problema con numero magico
« Respuesta #17 en: 5 Noviembre 2010, 22:01 pm »

Si a esos datos, los guardo, y con otra funcion los descomprimo (descomprime un archivo la funcion), funciona de maravilla, el problema es al descomprimir el string sin guardarlo en algun archivo.


Saludos, Sancho.Mazorka    :P
En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Re: GZipStream: Problema con numero magico
« Respuesta #18 en: 6 Noviembre 2010, 06:52 am »

Sancho.Mazorka pucha ahora si me acaba de entrar la intriga al parecer el metodo Read de los MemoryStream no funciona muy bien en VB pero si en c#



Codigo en C# todo funciona ok



Código:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.IO.Compression;



namespace GZipStreamC

{

    class Program

    {

        static void Main(string[] args)

        {

            string myDescomprimido;

            string myComprimido;

            Console.WriteLine("Ingrese Palabra");

           

            myDescomprimido = Console.ReadLine();



            myComprimido= Zip(myDescomprimido);



            Console.WriteLine(""); 

            Console.WriteLine("\"{0}\" comprimido = {1}", myDescomprimido, myComprimido);



            Console.WriteLine("");

            Console.WriteLine("\"{0}\" descomprimido = {1}", myDescomprimido, UnZip(myComprimido)); 

                   

            Console.ReadKey();   

        }



        public static string Zip(string text)

        {

            byte[] buffer = Encoding.UTF8.GetBytes(text);

            MemoryStream ms = new MemoryStream();

            using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))

            {

                zip.Write(buffer, 0, buffer.Length);

            }

            ms.Position = 0;

            byte[] compressed = new byte[ms.Length];

            ms.Read(compressed, 0, compressed.Length);

            byte[] gzBuffer = new byte[compressed.Length + 4];

            System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);

            System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);

            return Convert.ToBase64String(gzBuffer);

        }



        public static string UnZip(string compressedText)

        {

            byte[] gzBuffer = Convert.FromBase64String(compressedText);

            using (MemoryStream ms = new MemoryStream())

            {

                int msgLength = BitConverter.ToInt32(gzBuffer, 0);

                ms.Write(gzBuffer, 4, gzBuffer.Length - 4);

                byte[] buffer = new byte[msgLength];

                ms.Position = 0;



                using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))

                {

                    zip.Read(buffer, 0, buffer.Length);

                }

                return Encoding.UTF8.GetString(buffer);

            }

        }

    }

}






Equibalente en Vb .net no descomprime el UnZip  :(  el error del numero magico se produce cuando cambias la linea

Código:
Dim gzBuffer() As Byte = Convert.FromBase64String(compressedText)

del metodo UnZip por

Código:
System.Text.Encoding.ASCII.GetBytes(compressedText)



Y la verdad la cosa es muy rara ya que todo esta bien una solucion seria colocar el metodo UnZip en una libreria externa echa en c#

y agregarla a tu proyecto.





Código:
Imports System.Text

Imports System.IO

Imports System.IO.Compression



Module Module1



    Sub Main()

        Dim myDescomprimido As String

        Dim myComprimido As String

        Console.WriteLine("Ingrese Palabra")



        myDescomprimido = Console.ReadLine()



        myComprimido = Zip(myDescomprimido)



        Console.WriteLine("")

        Console.WriteLine("{0} comprimido = {1}", myDescomprimido, myComprimido)



        Console.WriteLine("")

        Console.WriteLine("{0} descomprimido = {1}", myDescomprimido, UnZip(myComprimido))



        Console.ReadKey()

    End Sub





    Public Function Zip(ByVal text As String) As String

        Dim buffer() As Byte = Encoding.UTF8.GetBytes(text)

        Dim ms As New MemoryStream

        Dim _zip As GZipStream = New GZipStream(ms, CompressionMode.Compress, True)

        _zip.Write(buffer, 0, buffer.Length)



        ms.Position = 0

        Dim compressed(ms.Length) As Byte

        ms.Read(compressed, 0, compressed.Length)



        Dim gzBuffer(compressed.Length + 4) As Byte



        System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length)



        System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4)



        Return Convert.ToBase64String(gzBuffer)



    End Function



    Public Function UnZip(ByVal compressedText As String) As String

        Dim gzBuffer() As Byte = Convert.FromBase64String(compressedText)



        Dim ms As New MemoryStream()



        Dim msgLength As Integer = BitConverter.ToInt32(gzBuffer, 0)



        ms.Write(gzBuffer, 4, gzBuffer.Length - 4)



        Dim buffer(msgLength) As Byte



        ms.Position = 0



        Dim _zip As GZipStream = New GZipStream(ms, CompressionMode.Decompress)

        _zip.Read(buffer, 0, buffer.Length - 1)



        Return Encoding.UTF8.GetString(buffer)



    End Function



End Module



En línea

Simplemente .::IT::.
Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
Re: GZipStream: Problema con numero magico
« Respuesta #19 en: 6 Noviembre 2010, 07:09 am »

jaja viste, es cualquiera :S yo tambien sospechaba de esa funcion Convert.FromBase64String(string)

Asi que tendre que hacer lo que decis, un ultimo favor  :$

Alguien podria hacer el .DLL de la funcion Zip y UnZip que esta en C# ?


Muchas gracias a todos ustedes por sus respuestas.


Saludos, Sancho.Mazorka    :P
En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con cuadrado mágico [RESUELTO]
Programación C/C++
bigfu 7 12,308 Último mensaje 14 Enero 2016, 02:11 am
por Dayciber
Cuadrado Mágico
Programación C/C++
Black Lotus 5 4,583 Último mensaje 15 Marzo 2013, 20:58 pm
por Black Lotus
Pasar programa de Ciclo if a for (cuadro magico)
.NET (C#, VB.NET, ASP)
ellandax 1 2,004 Último mensaje 19 Noviembre 2013, 21:00 pm
por Eleкtro
Cuadrado Mágico
Programación C/C++
anaaaaaaa 3 6,874 Último mensaje 7 Diciembre 2015, 16:37 pm
por ivancea96
cuadrado magico
Dudas Generales
manno 1 1,806 Último mensaje 5 Julio 2020, 02:15 am
por tincopasan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines