Leggere in inglese

Condividi tramite


Encoding.GetByteCount Metodo

Definizione

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di un set di caratteri.

Overload

GetByteCount(Char[], Int32, Int32)

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di un set di caratteri dalla matrice di caratteri specificata.

GetByteCount(String, Int32, Int32)

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di un set di caratteri dalla stringa specificata.

GetByteCount(Char*, Int32)

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di un set di caratteri a partire dal puntatore ai caratteri specificato.

GetByteCount(ReadOnlySpan<Char>)

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica dei caratteri nell'intervallo di caratteri specificato.

GetByteCount(Char[])

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di tutti i caratteri nella matrice di caratteri specificata.

GetByteCount(String)

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica dei caratteri nella stringa specificata.

GetByteCount(Char[], Int32, Int32)

Origine:
Encoding.cs
Origine:
Encoding.cs
Origine:
Encoding.cs

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di un set di caratteri dalla matrice di caratteri specificata.

public abstract int GetByteCount (char[] chars, int index, int count);

Parametri

chars
Char[]

Matrice di caratteri contenente il set di caratteri da codificare.

index
Int32

Indice del primo carattere da codificare.

count
Int32

Numero di caratteri da codificare.

Restituisce

Numero di byte prodotti dalla codifica dei caratteri specificati.

Eccezioni

chars è null.

index o count è minore di zero.

-oppure-

index e count non indicano un intervallo valido in chars.

Si è verificato un fallback (per altre informazioni, vedere Codifica dei caratteri in .NET)

-e-

EncoderFallback è impostato su EncoderExceptionFallback.

Esempio

L'esempio seguente determina il numero di byte necessari per codificare tre caratteri da una matrice di caratteri, codifica i caratteri e Visualizza 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

*/

Commenti

Per calcolare la dimensione esatta della matrice richiesta da GetBytes per archiviare i byte risultanti, chiamare il GetByteCount metodo. Per calcolare la dimensione massima della matrice, chiamare il GetMaxByteCount metodo. Il GetByteCount metodo in genere consente l'allocazione di una quantità di memoria inferiore, mentre il GetMaxByteCount metodo viene in genere eseguito più velocemente.

Il GetByteCount metodo determina il numero di byte che comportano la codifica di un set di caratteri Unicode e il GetBytes metodo esegue la codifica effettiva. Il GetBytes metodo prevede conversioni discrete, a differenza del Encoder.GetBytes metodo, che gestisce più conversioni in un singolo flusso di input.

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

  • È possibile che l'app debba codificare molti caratteri di input in una tabella codici ed elaborare i caratteri usando più chiamate. In questo caso, probabilmente è necessario mantenere lo stato tra le chiamate, prendendo in considerazione lo stato reso permanente dall'oggetto in Encoder uso.

  • Se l'app gestisce gli input di stringa, è consigliabile usare la versione in formato stringa di GetBytes .

  • La versione del buffer di caratteri Unicode di GetBytes(Char*, Int32, Byte*, Int32) consente alcune tecniche veloci, in particolare con più chiamate che usano l' Encoder oggetto o che si inseriscono in buffer esistenti. Tenere presente, tuttavia, che questa versione del metodo è talvolta non sicura, poiché i puntatori sono obbligatori.

  • Se l'app deve convertire una grande quantità di dati, deve riutilizzare il buffer di output. In questo caso, la GetBytes versione che supporta le matrici di byte è la scelta migliore.

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

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetByteCount(String, Int32, Int32)

Origine:
Encoding.cs
Origine:
Encoding.cs
Origine:
Encoding.cs

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di un set di caratteri dalla stringa specificata.

public int GetByteCount (string s, int index, int count);

Parametri

s
String

Stringa contenente il set di caratteri da codificare.

index
Int32

Indice del primo carattere da codificare.

count
Int32

Numero di caratteri da codificare.

Restituisce

Numero di byte prodotti dalla codifica della stringa.

Esempio

L'esempio seguente determina il numero di byte necessari per codificare tre caratteri da una matrice di caratteri, codifica i caratteri e Visualizza 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

*/

Commenti

Per calcolare la dimensione esatta della matrice richiesta da GetBytes per archiviare i byte risultanti, chiamare il GetByteCount metodo. Per calcolare la dimensione massima della matrice, chiamare il GetMaxByteCount metodo. Il GetByteCount metodo in genere consente l'allocazione di una quantità di memoria inferiore, mentre il GetMaxByteCount metodo viene in genere eseguito più velocemente.

Il GetByteCount metodo determina il numero di byte che comportano la codifica di un set di caratteri Unicode e il GetBytes metodo esegue la codifica effettiva. Il GetBytes metodo prevede conversioni discrete, a differenza del Encoder.GetBytes metodo, che gestisce più conversioni in un singolo flusso di input.

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

  • È possibile che l'app debba codificare molti caratteri di input in una tabella codici ed elaborare i caratteri usando più chiamate. In questo caso, probabilmente è necessario mantenere lo stato tra le chiamate, prendendo in considerazione lo stato reso permanente dall'oggetto in Encoder uso.

  • Se l'app gestisce gli input di stringa, è consigliabile usare la versione in formato stringa di GetBytes .

  • La versione del buffer di caratteri Unicode di GetBytes(Char*, Int32, Byte*, Int32) consente alcune tecniche veloci, in particolare con più chiamate che usano l' Encoder oggetto o che si inseriscono in buffer esistenti. Tenere presente, tuttavia, che questa versione del metodo è talvolta non sicura, poiché i puntatori sono obbligatori.

  • Se l'app deve convertire una grande quantità di dati, deve riutilizzare il buffer di output. In questo caso, la GetBytes versione che supporta le matrici di byte è la scelta migliore.

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

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

GetByteCount(Char*, Int32)

Origine:
Encoding.cs
Origine:
Encoding.cs
Origine:
Encoding.cs

Importante

Questa API non è conforme a CLS.

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di un set di caratteri a partire dal puntatore ai caratteri specificato.

[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetByteCount (char* chars, int count);
[System.CLSCompliant(false)]
public virtual int GetByteCount (char* chars, int count);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetByteCount (char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetByteCount (char* chars, int count);

Parametri

chars
Char*

Puntatore al primo carattere da codificare.

count
Int32

Numero di caratteri da codificare.

Restituisce

Numero di byte prodotti dalla codifica dei caratteri specificati.

Attributi

Eccezioni

chars è null.

count è minore di zero.

Si è verificato un fallback (per altre informazioni, vedere Codifica dei caratteri in .NET)

-e-

EncoderFallback è impostato su EncoderExceptionFallback.

Commenti

Per calcolare la dimensione esatta della matrice GetBytes necessaria per archiviare i byte risultanti, è necessario chiamare il GetByteCount metodo. Per calcolare la dimensione massima della matrice, chiamare il GetMaxByteCount metodo. Il GetByteCount metodo in genere consente l'allocazione di una quantità di memoria inferiore, mentre il GetMaxByteCount metodo viene in genere eseguito più velocemente.

Il GetByteCount(Char*, Int32) metodo determina il numero di byte che comportano la codifica di un set di caratteri Unicode e il GetBytes(Char*, Int32, Byte*, Int32) metodo esegue la codifica effettiva. Il GetBytes metodo prevede conversioni discrete, a differenza del Encoder.GetBytes metodo, che gestisce più conversioni in un singolo flusso di input.

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

  • È possibile che l'app debba codificare molti caratteri di input in una tabella codici ed elaborare i caratteri usando più chiamate. In questo caso, probabilmente è necessario mantenere lo stato tra le chiamate, prendendo in considerazione lo stato reso permanente dall'oggetto in Encoder uso.

  • Se l'app gestisce gli input di stringa, è necessario usare la versione in formato stringa del GetBytes metodo.

  • La versione del buffer di caratteri Unicode di GetBytes consente alcune tecniche veloci, in particolare con più chiamate che usano l' Encoder oggetto o che si inseriscono in buffer esistenti. Tenere presente, tuttavia, che questa versione del metodo è talvolta non sicura, poiché i puntatori sono obbligatori.

  • Se l'app deve convertire una grande quantità di dati, deve riutilizzare il buffer di output. In questo caso, la GetBytes versione che supporta le matrici di byte è la scelta migliore.

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

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetByteCount(ReadOnlySpan<Char>)

Origine:
Encoding.cs
Origine:
Encoding.cs
Origine:
Encoding.cs

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica dei caratteri nell'intervallo di caratteri specificato.

public virtual int GetByteCount (ReadOnlySpan<char> chars);

Parametri

chars
ReadOnlySpan<Char>

Intervallo di caratteri da codificare.

Restituisce

Numero di byte prodotti dalla codifica dell'intervallo di caratteri specificato.

Commenti

Per calcolare la dimensione dell'intervallo esatta richiesta da GetBytes per archiviare i byte risultanti, chiamare il GetByteCount metodo. Per calcolare la dimensione massima dell'intervallo, chiamare il GetMaxByteCount metodo. Il GetByteCount metodo in genere consente l'allocazione di una quantità di memoria inferiore, mentre il GetMaxByteCount metodo viene in genere eseguito più velocemente.

Il GetByteCount metodo determina il numero di byte che comportano la codifica di un set di caratteri Unicode e il GetBytes metodo esegue la codifica effettiva. Il GetBytes metodo prevede conversioni discrete, a differenza del Encoder.GetBytes metodo, che gestisce più conversioni in un singolo flusso di input.

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

  • È possibile che l'app debba codificare molti caratteri di input in una tabella codici ed elaborare i caratteri usando più chiamate. In questo caso, probabilmente è necessario mantenere lo stato tra le chiamate, prendendo in considerazione lo stato reso permanente dall'oggetto in Encoder uso.

  • Se l'app gestisce l'intervallo di input di caratteri, è consigliabile usare la versione span di GetBytes .

  • Si consiglia di utilizzare il Encoder.Convert metodo anziché GetByteCount . Il metodo di conversione converte il maggior quantità possibile di dati e genera un'eccezione se il buffer dell'intervallo di output è troppo piccolo. Per la codifica continua di un flusso, questo metodo è spesso la scelta migliore.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

GetByteCount(Char[])

Origine:
Encoding.cs
Origine:
Encoding.cs
Origine:
Encoding.cs

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica di tutti i caratteri nella matrice di caratteri specificata.

public virtual int GetByteCount (char[] chars);

Parametri

chars
Char[]

Matrice di caratteri contenente i caratteri da codificare.

Restituisce

Numero di byte prodotti dalla codifica di tutti i caratteri nella matrice di caratteri specificata.

Eccezioni

chars è null.

Si è verificato un fallback (per altre informazioni, vedere Codifica dei caratteri in .NET)

-e-

EncoderFallback è impostato su EncoderExceptionFallback.

Esempio

Nell'esempio seguente viene determinato il numero di byte necessari per codificare 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 the entire array, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, u7 );
      PrintCountsAndBytes( myChars, u8 );
      PrintCountsAndBytes( myChars, u16LE );
      PrintCountsAndBytes( myChars, u16BE );
      PrintCountsAndBytes( myChars, u32 );
   }

   public static void PrintCountsAndBytes( char[] chars, 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 );
      Console.Write( " {0,-3}", iBC );

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

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

      // 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       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

*/

Commenti

Per calcolare la dimensione esatta della matrice richiesta da GetBytes per archiviare i byte risultanti, chiamare il GetByteCount metodo. Per calcolare la dimensione massima della matrice, chiamare il GetMaxByteCount metodo. Il GetByteCount metodo in genere consente l'allocazione di una quantità di memoria inferiore, mentre il GetMaxByteCount metodo viene in genere eseguito più velocemente.

Il GetByteCount metodo determina il numero di byte che comportano la codifica di un set di caratteri Unicode e il GetBytes metodo esegue la codifica effettiva. Il GetBytes metodo prevede conversioni discrete, a differenza del Encoder.GetBytes metodo, che gestisce più conversioni in un singolo flusso di input.

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

  • È possibile che l'app debba codificare molti caratteri di input in una tabella codici ed elaborare i caratteri usando più chiamate. In questo caso, probabilmente è necessario mantenere lo stato tra le chiamate, prendendo in considerazione lo stato reso permanente dall'oggetto in Encoder uso.

  • Se l'app gestisce gli input di stringa, è necessario usare le versioni di stringa del GetBytes metodo.

  • La versione del buffer di caratteri Unicode di GetBytes(Char*, Int32, Byte*, Int32) consente alcune tecniche veloci, in particolare con più chiamate che usano l' Encoder oggetto o che si inseriscono in buffer esistenti. Tenere presente, tuttavia, che questa versione del metodo è talvolta non sicura, poiché i puntatori sono obbligatori.

  • Se l'app deve convertire una grande quantità di dati, è necessario riutilizzare il buffer di output. In questo caso, la GetBytes versione che supporta le matrici di byte è la scelta migliore.

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

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetByteCount(String)

Origine:
Encoding.cs
Origine:
Encoding.cs
Origine:
Encoding.cs

Quando ne viene eseguito l'override in una classe derivata, calcola il numero di byte prodotti dalla codifica dei caratteri nella stringa specificata.

public virtual int GetByteCount (string s);

Parametri

s
String

Stringa contenente il set di caratteri da codificare.

Restituisce

Numero di byte prodotti dalla codifica dei caratteri specificati.

Eccezioni

Si è verificato un fallback (per altre informazioni, vedere Codifica dei caratteri in .NET)

-e-

EncoderFallback è impostato su EncoderExceptionFallback.

Esempio

Nell'esempio seguente viene determinato il numero di byte necessari per codificare una stringa o un intervallo nella stringa, 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)
      String myStr = "za\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 the entire string, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the entire string:" );
      PrintCountsAndBytes( myStr, u7 );
      PrintCountsAndBytes( myStr, u8 );
      PrintCountsAndBytes( myStr, u16LE );
      PrintCountsAndBytes( myStr, u16BE );
      PrintCountsAndBytes( myStr, u32 );

      Console.WriteLine();

      // Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the characters from index 4 through 6:" );
      PrintCountsAndBytes( myStr, 4, 3, u7 );
      PrintCountsAndBytes( myStr, 4, 3, u8 );
      PrintCountsAndBytes( myStr, 4, 3, u16LE );
      PrintCountsAndBytes( myStr, 4, 3, u16BE );
      PrintCountsAndBytes( myStr, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( String s, Encoding enc )  {

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

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

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

      // Encode the entire string.
      byte[] bytes = enc.GetBytes( s );

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

   public static void PrintCountsAndBytes( String s, 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( s.ToCharArray(), index, count );
      Console.Write( " {0,-3}", iBC );

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

      // Encode a range of characters in the string.
      byte[] bytes = new byte[iBC];
      enc.GetBytes( s, 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.

Encoding the entire string:
System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

Encoding the characters from index 4 through 6:
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

*/

Commenti

Per calcolare la dimensione esatta della matrice richiesta da GetBytes per archiviare i byte risultanti, chiamare il GetByteCount metodo. Per calcolare la dimensione massima della matrice, chiamare il GetMaxByteCount metodo. Il GetByteCount metodo in genere consente l'allocazione di una quantità di memoria inferiore, mentre il GetMaxByteCount metodo viene in genere eseguito più velocemente.

Il GetByteCount metodo determina il numero di byte che comportano la codifica di un set di caratteri Unicode e il GetBytes metodo esegue la codifica effettiva. Il GetBytes metodo prevede conversioni discrete, a differenza del Encoder.GetBytes metodo, che gestisce più conversioni in un singolo flusso di input.

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

  • È possibile che l'app debba codificare molti caratteri di input in una tabella codici ed elaborare i caratteri usando più chiamate. In questo caso, probabilmente è necessario mantenere lo stato tra le chiamate, prendendo in considerazione lo stato reso permanente dall'oggetto in Encoder uso.

  • Se l'app gestisce gli input di stringa, è consigliabile usare la versione in formato stringa di GetBytes .

  • La versione del buffer di caratteri Unicode di GetBytes(Char*, Int32, Byte*, Int32) consente alcune tecniche veloci, in particolare con più chiamate che usano l' Encoder oggetto o che si inseriscono in buffer esistenti. Tenere presente, tuttavia, che questa versione del metodo è talvolta non sicura, poiché i puntatori sono obbligatori.

  • Se l'app deve convertire una grande quantità di dati, deve riutilizzare il buffer di output. In questo caso, la GetBytes versione che supporta le matrici di byte è la scelta migliore.

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

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0