Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase BitConverter

 

Publicado: octubre de 2016

Convierte tipos de datos base en una matriz de bytes, y una matriz de bytes en tipos de datos base.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

System.Object
  System.BitConverter

public static class BitConverter

NombreDescripción
System_CAPS_pubmethodSystem_CAPS_staticDoubleToInt64Bits(Double)

Convierte al número de punto flotante de precisión doble especificado en un entero de 64 bits con signo.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Boolean)

Devuelve el valor booleano especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Char)

Devuelve el valor del carácter Unicode especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Double)

Devuelve el valor de punto flotante de precisión doble especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Int16)

Devuelve el valor del entero de 16 bits con signo especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Int32)

Devuelve el valor del entero de 32 bits con signo especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Int64)

Devuelve el valor del entero de 64 bits con signo especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Single)

Devuelve el valor de punto flotante de precisión sencilla especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(UInt16)

Devuelve el valor del entero de 16 bits sin signo especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(UInt32)

Devuelve el valor del entero de 32 bits sin signo especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(UInt64)

Devuelve el valor del entero de 64 bits sin signo especificado como una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticInt64BitsToDouble(Int64)

Convierte el entero de 64 bits con signo especificado en un número de punto flotante de precisión doble.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Byte[], Int32)

Devuelve un valor booleano convertido a partir del byte en una posición especificada de una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToChar(Byte[], Int32)

Devuelve un carácter Unicode convertido a partir de dos bytes en una posición especificada en una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToDouble(Byte[], Int32)

Devuelve un número de punto flotante de precisión doble convertido a partir de ocho bytes en una posición especificada en una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToInt16(Byte[], Int32)

Devuelve un entero de 16 bits con signo convertido a partir de dos bytes en una posición especificada en una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToInt32(Byte[], Int32)

Devuelve un entero de 32 bits con signo convertido a partir de cuatro bytes en una posición especificada en una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToInt64(Byte[], Int32)

Devuelve un entero de 64 bits con signo convertido a partir de ocho bytes en una posición especificada en una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToSingle(Byte[], Int32)

Devuelve un número de punto flotante de precisión sencilla convertido a partir de cuatro bytes en una posición especificada en una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToString(Byte[])

Convierte el valor numérico de cada elemento de una matriz de bytes especificada en su representación de cadena hexadecimal equivalente.

System_CAPS_pubmethodSystem_CAPS_staticToString(Byte[], Int32)

Convierte el valor numérico de cada elemento de una submatriz de bytes especificada en su representación de cadena hexadecimal equivalente.

System_CAPS_pubmethodSystem_CAPS_staticToString(Byte[], Int32, Int32)

Convierte el valor numérico de cada elemento de una submatriz de bytes especificada en su representación de cadena hexadecimal equivalente.

System_CAPS_pubmethodSystem_CAPS_staticToUInt16(Byte[], Int32)

Devuelve un entero de 16 bits sin signo convertido a partir de dos bytes en una posición especificada en una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToUInt32(Byte[], Int32)

Devuelve un entero de 32 bits sin signo convertido a partir de cuatro bytes en una posición especificada en una matriz de bytes.

System_CAPS_pubmethodSystem_CAPS_staticToUInt64(Byte[], Int32)

Devuelve un entero de 64 bits sin signo convertido a partir de ocho bytes en una posición especificada en una matriz de bytes.

NombreDescripción
System_CAPS_pubfieldSystem_CAPS_staticIsLittleEndian

Indica el orden de bytes ("modos endian") en los datos que se almacenan en la arquitectura de este equipo.

La BitConverter clase permite manipular los tipos de valor en su forma fundamental, como una serie de bytes. Un byte se define como un entero de 8 bits sin signo. La BitConverter clase incluye métodos estáticos para convertir cada uno de los tipos primitivos a y desde una matriz de bytes, como se muestra en la tabla siguiente.

Tipo

A la conversión de byte

De la conversión de byte

Boolean

GetBytes(Boolean)

ToBoolean

Char

GetBytes(Char)

ToChar

Double

GetBytes(Double)

-o-

DoubleToInt64Bits(Double)

ToDouble

-o-

Int64BitsToDouble

Int16

GetBytes(Int16)

ToInt16

Int32

GetBytes(Int32)

ToInt32

Int64

GetBytes(Int64)

ToInt64

Single

GetBytes(Single)

ToSingle

UInt16

GetBytes(UInt16)

ToUInt16

UInt32

GetBytes(UInt32)

ToUInt32

UInt64

GetBytes(UInt64)

ToUInt64

Si usa BitConverter métodos a los datos de ida y vuelta, asegúrese de que el GetBytes sobrecarga y la Totipo método especifican el mismo tipo. Como se muestra en el ejemplo siguiente, restaurar una matriz que representa un entero con signo mediante una llamada a la ToUInt32 método puede dar lugar a un valor que es diferente del original. Para obtener más información, vea la entrada Working with Signed Non-Decimal and Bitwise Values en el Blog de BCL Team.

using System;

public class Example
{
   public static void Main()
   {
      int value = -16;
      Byte[] bytes = BitConverter.GetBytes(value); 

      // Convert bytes back to Int32.
      int intValue = BitConverter.ToInt32(bytes, 0);
      Console.WriteLine("{0} = {1}: {2}", 
                        value, intValue, 
                        value.Equals(intValue) ? "Round-trips" : "Does not round-trip");
      // Convert bytes to UInt32.
      uint uintValue = BitConverter.ToUInt32(bytes, 0);
      Console.WriteLine("{0} = {1}: {2}", value, uintValue, 
                        value.Equals(uintValue) ? "Round-trips" : "Does not round-trip");
   }
}
// The example displays the following output:
//       -16 = -16: Round-trips
//       -16 = 4294967280: Does not round-trip

El orden de bytes de la matriz devuelta por la GetBytes sobrecargas del método (así como el orden de bits en el entero devuelto por el DoubleToInt64Bits método y el orden de las cadenas hexadecimales devuelto por el ToString(Byte[]) método) depende de si la arquitectura de equipo es little-endian o big-endian. De igual forma, el orden de bytes de la matriz y devuelve el ToIntegerValue métodos y ToChar método depende de si la arquitectura de equipo es little-endian o big-endian. El orden de una arquitectura viene indicado por el IsLittleEndian propiedad, que devuelve true en sistemas de little-endian y false en sistemas de big-endian. En los sistemas de little-endian, bytes de orden más bajo preceden a los bytes de orden superior. En el sistema de big-endian, bytes de orden superior preceden a los bytes de orden más bajo. En la tabla siguiente se ilustra la diferencia entre las matrices de bytes que son el resultado de pasar el entero 1,234,567,890 (0x499602D2) a la GetBytes(Int32) método. Los bytes se enumeran en orden de byte en el índice 0 hasta el byte en el índice 3.

Little-endian

D2-02-96-49

Big-endian

49-96-02-D2

Dado que el valor devuelto de algunos métodos depende de la arquitectura del sistema, tenga cuidado al transmitir datos de byte más allá de los límites del equipo:

  • Si se garantiza que todos los sistemas de envío y recepción de datos tienen el mismo endian, se hará nada a los datos.

  • Si los sistemas enviar y recibir datos pueden tener endian distinto, siempre transmitir datos en un orden concreto. Esto significa que el orden de bytes de la matriz puede tener invertir antes de enviarlos o después de recibirlos. Es una convención común transmitir datos en el orden de bytes de red (orden big-endian). En el ejemplo siguiente se proporciona una implementación para el envío de un valor entero en el orden de bytes de red.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          int value = 12345678;
          byte[] bytes = BitConverter.GetBytes(value);
          Console.WriteLine(BitConverter.ToString(bytes));
    
          if (BitConverter.IsLittleEndian)
             Array.Reverse(bytes); 
    
          Console.WriteLine(BitConverter.ToString(bytes));
          // Call method to send byte stream across machine boundaries.
    
          // Receive byte stream from beyond machine boundaries.
          Console.WriteLine(BitConverter.ToString(bytes));
          if (BitConverter.IsLittleEndian)
             Array.Reverse(bytes);
    
          Console.WriteLine(BitConverter.ToString(bytes));
          int result = BitConverter.ToInt32(bytes, 0);
          Console.WriteLine("Original value: {0}", value);
          Console.WriteLine("Returned value: {0}", result);
       }
    }
    // The example displays the following output on a little-endian system:
    //       4E-61-BC-00
    //       00-BC-61-4E
    //       00-BC-61-4E
    //       4E-61-BC-00
    //       Original value: 12345678
    //       Returned value: 12345678
    
  • Si los sistemas de envío y recepción de datos pueden tener endian distinto y los datos que se transmitan se componen de enteros con signo, llame a la IPAddress.HostToNetworkOrder método para convertir los datos en orden de bytes de red y la IPAddress.NetworkToHostOrder método para convertir en el orden requerido por el destinatario.

En el ejemplo de código siguiente se muestra el uso de varios BitConverter métodos de la clase.

// Example of BitConverter class methods.
using System;

class BitConverterDemo
{
    public static void Main( )
    {
        const string formatter = "{0,25}{1,30}";

        double  aDoubl  = 0.1111111111111111111;
        float   aSingl  = 0.1111111111111111111F;
        long    aLong   = 1111111111111111111;
        int     anInt   = 1111111111;
        short   aShort  = 11111;
        char    aChar   = '*';
        bool    aBool   = true;

        Console.WriteLine( 
            "This example of methods of the BitConverter class" +
            "\ngenerates the following output.\n" );
        Console.WriteLine( formatter, "argument", "byte array" );
        Console.WriteLine( formatter, "--------", "----------" );

        // Convert values to Byte arrays and display them.
        Console.WriteLine( formatter, aDoubl, 
            BitConverter.ToString( BitConverter.GetBytes( aDoubl ) ) );
        Console.WriteLine( formatter, aSingl, 
            BitConverter.ToString( BitConverter.GetBytes( aSingl ) ) );
        Console.WriteLine( formatter, aLong, 
            BitConverter.ToString( BitConverter.GetBytes( aLong ) ) );
        Console.WriteLine( formatter, anInt, 
            BitConverter.ToString( BitConverter.GetBytes( anInt ) ) );
        Console.WriteLine( formatter, aShort, 
            BitConverter.ToString( BitConverter.GetBytes( aShort ) ) );
        Console.WriteLine( formatter, aChar, 
            BitConverter.ToString( BitConverter.GetBytes( aChar ) ) );
        Console.WriteLine( formatter, aBool, 
            BitConverter.ToString( BitConverter.GetBytes( aBool ) ) );
    }
}

/*
This example of methods of the BitConverter class
generates the following output.

                 argument                    byte array
                 --------                    ----------
        0.111111111111111       1C-C7-71-1C-C7-71-BC-3F
                0.1111111                   39-8E-E3-3D
      1111111111111111111       C7-71-C4-2B-AB-75-6B-0F
               1111111111                   C7-35-3A-42
                    11111                         67-2B
                        *                         2A-00
                     True                            01
*/

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: