Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe BitConverter

 

Data di pubblicazione: ottobre 2016

Converte tipi di dati di base in una matrice di byte e una matrice di byte in tipi di dati di base.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)


public static class BitConverter

NomeDescrizione
System_CAPS_pubmethodSystem_CAPS_staticDoubleToInt64Bits(Double)

Converte il numero in virgola mobile e precisione doppia specificato in un intero con segno a 64 bit.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Boolean)

Restituisce il valore booleano specificato come matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Char)

Restituisce il valore del carattere Unicode specificato come una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Double)

Restituisce il valore a virgola mobile e precisione doppia specificato come una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Int16)

Restituisce il valore intero con segno a 16 bit specificato come una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Int32)

Restituisce il valore intero con segno a 32 bit specificato come una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Int64)

Restituisce il valore intero con segno a 64 bit specificato come matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(Single)

Restituisce il valore a virgola mobile e precisione singola specificato come una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(UInt16)

Restituisce il valore intero senza segno a 16 bit specificato come una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(UInt32)

Restituisce il valore intero senza segno a 32 bit specificato come una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticGetBytes(UInt64)

Restituisce il valore intero senza segno a 64 bit specificato come una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticInt64BitsToDouble(Int64)

Converte l'intero con segno a 64 bit specificato in un numero a virgola mobile e precisione doppia.

System_CAPS_pubmethodSystem_CAPS_staticToBoolean(Byte[], Int32)

Restituisce un valore booleano convertito dal byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToChar(Byte[], Int32)

Restituisce un carattere Unicode convertito da due byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToDouble(Byte[], Int32)

Restituisce un numero in virgola mobile e precisione doppia convertito da otto byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToInt16(Byte[], Int32)

Restituisce un intero con segno a 16 bit convertito da due byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToInt32(Byte[], Int32)

Restituisce un intero con segno a 32 bit convertito da quattro byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToInt64(Byte[], Int32)

Restituisce un intero con segno a 64 bit convertito da otto byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToSingle(Byte[], Int32)

Restituisce un numero in virgola mobile e precisione singola convertito da quattro byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToString(Byte[])

Converte il valore numerico di ogni elemento di una matrice di byte specificata nella relativa rappresentazione di stringa esadecimale equivalente.

System_CAPS_pubmethodSystem_CAPS_staticToString(Byte[], Int32)

Converte il valore numerico di ogni elemento di una sottomatrice specificata di byte nella relativa rappresentazione di stringa esadecimale equivalente.

System_CAPS_pubmethodSystem_CAPS_staticToString(Byte[], Int32, Int32)

Converte il valore numerico di ogni elemento di una sottomatrice specificata di byte nella relativa rappresentazione di stringa esadecimale equivalente.

System_CAPS_pubmethodSystem_CAPS_staticToUInt16(Byte[], Int32)

Restituisce un intero senza segno a 16 bit convertito da due byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToUInt32(Byte[], Int32)

Restituisce un intero senza segno a 32 bit convertito da quattro byte in una posizione specificata in una matrice di byte.

System_CAPS_pubmethodSystem_CAPS_staticToUInt64(Byte[], Int32)

Restituisce un intero senza segno a 64 bit convertito da otto byte in una posizione specificata in una matrice di byte.

NomeDescrizione
System_CAPS_pubfieldSystem_CAPS_staticIsLittleEndian

Indica l'ordine dei byte ("architettura endian") in cui vengono memorizzati i dati in questa architettura di computer.

La BitConverter classe consente di modificare i tipi di valore nella loro forma fondamentale, come una serie di byte. Un byte è definito come un intero senza segno a 8 bit. La BitConverter classe include metodi statici per convertire tutti i tipi primitivi di in e da una matrice di byte, come illustrato nella tabella seguente.

Tipo

Conversione di byte

Conversione di byte

Boolean

GetBytes(Boolean)

ToBoolean

Char

GetBytes(Char)

ToChar

Double

GetBytes(Double)

-oppure-

DoubleToInt64Bits(Double)

ToDouble

-oppure-

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

Se si utilizza BitConverter metodi per il round trip dei dati, assicurarsi che il GetBytes overload e Totipo metodo specificano lo stesso tipo. Come illustrato nell'esempio seguente, il ripristino di una matrice che rappresenta un intero con segno chiamando il ToUInt32 metodo può generare un valore che è diverso dall'originale. Per ulteriori informazioni, vedere la voce Working with Signed Non-Decimal and Bitwise Values nel Blog del Team BCL.

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

L'ordine dei byte nella matrice restituita dal GetBytes overload del metodo (nonché l'ordine di bit nel valore integer restituito dal DoubleToInt64Bits (metodo) e l'ordine delle stringhe esadecimali restituite dal ToString(Byte[]) metodo) varia a seconda che l'architettura del computer little-endian o big-endian. Analogamente, l'ordine dei byte nella matrice e restituito dal ToIntegerValue metodi e ToChar metodo varia a seconda che l'architettura del computer little-endian o big-endian. L'ordine dei byte di un'architettura è indicato dal IsLittleEndian proprietà, che restituisce true su sistemi little-endian e false nei sistemi big-endian. Nei sistemi little-endian, i byte di ordine inferiore precedono i byte di ordine superiore. Nel sistema big-endian, i byte di ordine superiore precedono i byte di ordine inferiore. Nella tabella seguente viene illustrata la differenza nelle matrici di byte che risultano dal passaggio dell'intero 1.234.567.890 (0x499602D2) per il GetBytes(Int32) metodo. I byte sono elencati in ordine di byte in corrispondenza dell'indice 0 al byte in corrispondenza dell'indice 3.

Little-endian

D2-02-96-49

Big-endian

49-96-02-D2

Poiché il valore restituito di alcuni metodi dipende dall'architettura del sistema, prestare attenzione durante la trasmissione di dati byte oltre i limiti della macchina:

  • Se tutti i sistemi, l'invio e ricezione di dati sono garantiti che l'ordine dei byte stessa, non è eseguita alcuna operazione per i dati.

  • Se i sistemi che inviano e ricevono dati possono avere l'ordine dei byte diverso, trasmettere i dati sempre in un ordine particolare. Ciò significa che l'ordine dei byte nella matrice potrebbe essere necessario invertire prima dell'invio o dopo averli ricevuti. Una convenzione comune consiste nella trasmissione dei dati in ordine di byte di rete (ordine big-endian). Nell'esempio seguente fornisce un'implementazione per l'invio di un valore intero nell'ordine dei byte di rete.

    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
    
  • Se è possibile inviare e ricevere dati di sistemi hanno l'ordine dei byte diverso e i dati da trasmettere è costituito da numeri interi con segno, chiamare il IPAddress.HostToNetworkOrder metodo per convertire i dati in ordine byte di rete e IPAddress.NetworkToHostOrder metodo per convertirlo in ordine richiesto dal destinatario.

Esempio di codice seguente viene illustrato l'utilizzo di diverse BitConverter metodi della classe.

// 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
*/

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: