Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: CATBro en 29 Octubre 2011, 07:10 am



Título: BitConverter Duda
Publicado por: CATBro en 29 Octubre 2011, 07:10 am
Yo y mis dudas  :xD  bueno, lo que pasa es que no estoy seguro si estoy entiendo bien el uso de la clase Bitconverter, lo que entiendo es que me permite convertir de un tipo de dato a otro pero puedo elegir cuantos bits(bytes) quiero convertir de ese valor? Estuve practicando pero mi razonamiento no entra con los resultados pero estoy entiendo bien o mal, les mostraria el codigo pero ya no se que le hice Jeje

Saludos


Título: Re: BitConverter Duda
Publicado por: Unbr0ken en 29 Octubre 2011, 09:00 am
...


La clase BitConverter (http://msdn.microsoft.com/es-es/library/system.bitconverter.aspx) te ayuda a manejar los tipos de valores como una serie de bytes, es decir, convierte un tipo de valor específico en una matriz de bytes y viceversa.

Mejor dicho, te convierte matrices de bytes a algún tipo de dato específico integrado en la clase, o de un tipo de dato específico integrado en la clase a una matriz de bytes.

Para convertir de un tipo de dato a otro tipo de dato usa la clase Convert (http://msdn.microsoft.com/es-es/library/system.convert.aspx).


Título: Re: BitConverter Duda
Publicado por: CATBro en 29 Octubre 2011, 10:14 am
Entonces de un tipo de dato a una matriz de bytes,

Código:
            public Packet(byte[] dataStream)
        {
            // Read the data identifier from the beginning of the stream (4 bytes)
            this.dataIdentifier = (DataIdentifier)BitConverter.ToInt32(dataStream, 0);

            // Read the length of the name (4 bytes)
            int nameLength = BitConverter.ToInt32(dataStream, 4);

            // Read the length of the message (4 bytes)
            int msgLength = BitConverter.ToInt32(dataStream, 8);

            // Read the name field
            if (nameLength > 0)
                this.name = Encoding.UTF8.GetString(dataStream, 12, nameLength);
            else
                this.name = null;

            // Read the message field
            if (msgLength > 0)
                this.message = Encoding.UTF8.GetString(dataStream, 12 +    nameLength, msgLength);
            else
                this.message = null;
        }




En ese codigo , lo que hace es convertir de bytes a enteros, y de bytes a un tipo de clase? pero los parametros donde dice datastream supongo que es el arreglo de  bytes de donde hara la conversion, pero el segundo parametro que significa??

Saludos
 


Título: Re: BitConverter Duda
Publicado por: Unbr0ken en 29 Octubre 2011, 14:13 pm
...


No sé que IDE estés usando, pero el del Visual Studio 2010 (No recuerdo cuales otras versiones), muestra la definición de los parámetros requeridos en una función de una clase interna de .NET Framework (O de una referencia, en caso de tener definición), en otras palabras, el mismo IDE te dice lo que me estás preguntando:

(http://www.freeimagehosting.net/newuploads/7825b.png)

Cabe destacar que el parámetro startindex es base cero, por tal, comenzará a obtener los 4 bytes desde la posición establecida a tal base. (Obtiene 4 bytes porque obviamente los valores enteros (int) ocupan 4 bytes en memoria).

De todos modos, si te quedan dudas, revisa la función .ToInt32() (http://msdn.microsoft.com/es-es/library/system.bitconverter.touint32.aspx) de la clase BitConverter (http://msdn.microsoft.com/es-es/library/system.bitconverter.aspx).