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
Questa documentazione è stata archiviata e non viene gestita.

Metodo Encoding.GetBytes (Char[], Int32, Int32, Byte[], Int32)

Quando sottoposto a override in una classe derivata, codifica un insieme di caratteri partendo dalla matrice di caratteri specificata nella matrice di byte specificata.

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

public abstract int GetBytes(
	char[] chars,
	int charIndex,
	int charCount,
	byte[] bytes,
	int byteIndex
)

Parametri

chars
Tipo: System.Char[]
Matrice di caratteri contenente l'insieme di caratteri da codificare.
charIndex
Tipo: System.Int32
Indice del primo carattere da codificare.
charCount
Tipo: System.Int32
Numero di caratteri da codificare.
bytes
Tipo: System.Byte[]
Matrice di byte per contenere la sequenza di byte risultante.
byteIndex
Tipo: System.Int32
Indice in corrispondenza del quale iniziare la scrittura della sequenza di byte risultante.

Valore restituito

Tipo: System.Int32
Numero effettivo di byte scritti in bytes.

EccezioneCondizione
ArgumentNullException

chars è null.

-oppure-

bytes è null.

ArgumentOutOfRangeException

charIndex o charCount o byteIndex è minore di zero.

-oppure-

charIndex e charCount non identificano un intervallo valido in chars.

-oppure-

byteIndex non è un indice valido in bytes.

ArgumentException

bytes non dispone di sufficiente capacità da byteIndex alla fine della matrice per contenere i byte risultanti.

EncoderFallbackException

Si è verificato un fallback (per la spiegazione completa, vedere Codifica di caratteri in .NET Framework)

- e -

EncoderFallback è impostato su EncoderExceptionFallback.

Per calcolare la dimensione esatta della matrice richiesta dal metodo GetBytes per archiviare i byte risultanti, è necessario che l'applicazione utilizzi GetByteCount. Per calcolare la dimensione massima della matrice, l'applicazione deve utilizzare GetMaxByteCount. Il metodo GetByteCount consente in genere di allocare una quantità minore di memoria, mentre il metodo GetMaxByteCount è generalmente più veloce nell'esecuzione.

Se i dati da convertire sono disponibili solo in blocchi sequenziali (ad esempio i dati letti da un flusso) o se la quantità di dati è talmente elevata da richiedere la suddivisione in blocchi di dimensioni inferiori, è necessario che l'applicazione utilizzi l'oggetto Decoder o Encoder fornito dal metodo GetDecoder o GetEncoder, rispettivamente, di una classe derivata.

Il metodo GetByteCount consente di determinare il numero di byte risultanti dalla codifica di un set di caratteri Unicode, mentre il metodo GetBytes consente di eseguire la codifica. Il metodo Encoding.GetBytes prevede conversioni discrete, a differenza del metodo Encoder.GetBytes che gestisce più conversioni su un solo flusso di input.

Sono supportate diverse versioni di GetByteCount e GetBytes. Di seguito vengono riportate alcune considerazioni di programmazione per l'utilizzo di questi metodi:

  • È possibile che l'applicazione debba codificare molti caratteri di input in una tabella codici ed elaborare i caratteri utilizzando più chiamate. In questo caso, è probabile che l'applicazione debba gestire lo stato tra chiamate, prendendo in considerazione lo stato salvato in modo permanente dall'oggetto Encoder utilizzato. Ad esempio, una sequenza di caratteri che include coppie di surrogati potrebbe terminare con un surrogato alto. L'oggetto Encoder ricorderà tale surrogato alto in modo che possa essere combinato con un surrogato basso all'inizio di una chiamata successiva. Gli oggetti Encoding non saranno in grado di gestire lo stato, pertanto il carattere sarà inviato all'oggetto EncoderFallback.

  • Se l'applicazione gestisce gli input della stringa, si consiglia di utilizzare la versione in formato stringa di GetBytes.

  • La versione buffer dei caratteri Unicode di GetBytes consente alcune tecniche veloci, in particolare con più chiamate che utilizzano l'oggetto Encoder o effettuano inserimenti nei buffer esistenti. Tuttavia, si tenga presente che questa versione del metodo a volte non è sicura poiché sono richiesti i puntatori.

  • Se l'applicazione deve convertire un grande quantità di dati, è necessario che riutilizzi il buffer di output. In questo caso, la versione GetBytes che supporta matrici di byte costituisce la scelta migliore.

  • Utilizzare il metodo Encoder.Convert anziché GetByteCount. Il metodo di conversione converte il maggior numero di dati possibile e genera un'eccezione se il buffer di output è troppo piccolo. Per la codifica continua di un flusso, questo metodo spesso costituisce la scelta migliore.

Nell'esempio seguente viene determinato il numero di byte necessari per codificare tre caratteri appartenenti a una matrice di caratteri, vengono codificati i caratteri e vengono visualizzati i byte risultanti.


using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // The characters to encode:
      //    Latin Small Letter Z (U+007A)
      //    Latin Small Letter A (U+0061)
      //    Combining Breve (U+0306)
      //    Latin Small Letter AE With Acute (U+01FD)
      //    Greek Small Letter Beta (U+03B2)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, 4, 3, u7 );
      PrintCountsAndBytes( myChars, 4, 3, u8 );
      PrintCountsAndBytes( myChars, 4, 3, u16LE );
      PrintCountsAndBytes( myChars, 4, 3, u16BE );
      PrintCountsAndBytes( myChars, 4, 3, u32 );

   }


   public static void PrintCountsAndBytes( char[] chars, int index, int count, Encoding enc )  {

      // Display the name of the encoding used.
      Console.Write( "{0,-30} :", enc.ToString() );

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( chars, index, count );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( count );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the array of chars.
      byte[] bytes = enc.GetBytes( chars, index, count );

      // The following is an alternative way to encode the array of chars:
      // byte[] bytes = new byte[iBC];
      // enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );

   }


   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
         Console.WriteLine( "<none>" );
      else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }

   }

}


/* 
This code produces the following output.

System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

*/



.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Supportato in:

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Mostra: