Encoding.GetCharCount Methode

Definitie

Wanneer deze wordt overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door het decoderen van een reeks bytes.

Overloads

Name Description
GetCharCount(Byte[])

Wanneer deze wordt overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door alle bytes in de opgegeven bytematrix te decoderen.

GetCharCount(ReadOnlySpan<Byte>)

Wanneer deze wordt overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door de opgegeven bytespanne met het kenmerk Alleen-lezen te decoderen.

GetCharCount(Byte*, Int32)

Wanneer deze worden overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door een reeks bytes te decoderen die beginnen bij de opgegeven byteaanwijzer.

GetCharCount(Byte[], Int32, Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door het decoderen van een reeks bytes van de opgegeven bytematrix.

GetCharCount(Byte[])

Wanneer deze wordt overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door alle bytes in de opgegeven bytematrix te decoderen.

public:
 virtual int GetCharCount(cli::array <System::Byte> ^ bytes);
public virtual int GetCharCount(byte[] bytes);
abstract member GetCharCount : byte[] -> int
override this.GetCharCount : byte[] -> int
Public Overridable Function GetCharCount (bytes As Byte()) As Integer

Parameters

bytes
Byte[]

De bytematrix met de reeks bytes die moet worden gedecodeerd.

Retouren

Het aantal tekens dat wordt geproduceerd door de opgegeven reeks bytes te decoderen.

Uitzonderingen

bytes is null.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Voorbeelden

In het volgende voorbeeld wordt een tekenreeks gecodeerd in een matrix van bytes en worden de bytes vervolgens gedecodeerd in een matrix met tekens.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Encoding u32LE = Encoding.GetEncoding( "utf-32" );
      Encoding u32BE = Encoding.GetEncoding( "utf-32BE" );

      // Use a string containing the following characters:
      //    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)
      String myStr = "za\u0306\u01FD\u03B2";

      // Encode the string using the big-endian byte order.
      byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
      u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );

      // Encode the string using the little-endian byte order.
      byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
      u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );

      // Get the char counts, and decode the byte arrays.
      Console.Write( "BE array with BE encoding : " );
      PrintCountsAndChars( barrBE, u32BE );
      Console.Write( "LE array with LE encoding : " );
      PrintCountsAndChars( barrLE, u32LE );
   }

   public static void PrintCountsAndChars( byte[] bytes, Encoding enc )  {

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

      // Display the exact character count.
      int iCC  = enc.GetCharCount( bytes );
      Console.Write( " {0,-3}", iCC );

      // Display the maximum character count.
      int iMCC = enc.GetMaxCharCount( bytes.Length );
      Console.Write( " {0,-3} :", iMCC );

      // Decode the bytes and display the characters.
      char[] chars = enc.GetChars( bytes );
      Console.WriteLine( chars );
   }
}


/* 
This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.

BE array with BE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ
LE array with LE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Dim u32LE As Encoding = Encoding.GetEncoding("utf-32")
      Dim u32BE As Encoding = Encoding.GetEncoding("utf-32BE")

      ' Use a string containing the following characters:
      '    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)
      Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) 

      ' Encode the string using the big-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      Dim barrBE(u32BE.GetByteCount(myStr) - 1) As Byte
      u32BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)

      ' Encode the string using the little-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      Dim barrLE(u32LE.GetByteCount(myStr) - 1) As Byte
      u32LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)

      ' Get the char counts, and decode the byte arrays.
      Console.Write("BE array with BE encoding : ")
      PrintCountsAndChars(barrBE, u32BE)
      Console.Write("LE array with LE encoding : ")
      PrintCountsAndChars(barrLE, u32LE)

   End Sub


   Public Shared Sub PrintCountsAndChars(bytes() As Byte, enc As Encoding)

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

      ' Display the exact character count.
      Dim iCC As Integer = enc.GetCharCount(bytes)
      Console.Write(" {0,-3}", iCC)

      ' Display the maximum character count.
      Dim iMCC As Integer = enc.GetMaxCharCount(bytes.Length)
      Console.Write(" {0,-3} :", iMCC)

      ' Decode the bytes and display the characters.
      Dim chars As Char() = enc.GetChars(bytes)
      Console.WriteLine(chars)

   End Sub

End Class


'This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.
'
'BE array with BE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ
'LE array with LE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ

Opmerkingen

Als u de exacte matrixgrootte wilt berekenen die is vereist voor GetChars(Byte[]) het opslaan van de resulterende tekens, moet u de GetCharCount(Byte[]) methode gebruiken. Als u de maximale matrixgrootte wilt berekenen, moet u de GetMaxCharCount(Int32) methode gebruiken. Met de GetCharCount(Byte[]) methode kan over het algemeen minder geheugen worden toegewezen, terwijl de GetMaxCharCount methode doorgaans sneller wordt uitgevoerd.

De GetCharCount(Byte[]) methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars(Byte[]) methode voert de daadwerkelijke decodering uit. De Encoding.GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden.

  • Als uw app tekenreeksuitvoer verwerkt, moet u de GetString methode gebruiken. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • De byteversie van GetChars(Byte*, Int32, Char*, Int32) maakt een aantal snelle technieken mogelijk, met name bij meerdere aanroepen naar grote buffers. Houd er echter rekening mee dat deze methodeversie soms onveilig is, omdat aanwijzers vereist zijn.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Zie ook

Van toepassing op

GetCharCount(ReadOnlySpan<Byte>)

Wanneer deze wordt overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door de opgegeven bytespanne met het kenmerk Alleen-lezen te decoderen.

public:
 virtual int GetCharCount(ReadOnlySpan<System::Byte> bytes);
public virtual int GetCharCount(ReadOnlySpan<byte> bytes);
abstract member GetCharCount : ReadOnlySpan<byte> -> int
override this.GetCharCount : ReadOnlySpan<byte> -> int
Public Overridable Function GetCharCount (bytes As ReadOnlySpan(Of Byte)) As Integer

Parameters

bytes
ReadOnlySpan<Byte>

Een bytespanne met het kenmerk Alleen-lezen om te decoderen.

Retouren

Het aantal tekens dat wordt geproduceerd door de bytespanne te decoderen.

Opmerkingen

Als u de exacte matrixgrootte wilt berekenen die GetChars nodig is om de resulterende tekens op te slaan, moet u de GetCharCount methode gebruiken. Als u de maximale matrixgrootte wilt berekenen, gebruikt u de GetMaxCharCount methode. Met de GetCharCount methode kan over het algemeen minder geheugen worden toegewezen, terwijl de GetMaxCharCount methode doorgaans sneller wordt uitgevoerd.

De GetCharCount methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars methode voert de daadwerkelijke decodering uit. De GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden.

  • Als uw app tekenreeksuitvoer verwerkt, is het raadzaam om de GetString methode te gebruiken. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Van toepassing op

GetCharCount(Byte*, Int32)

Belangrijk

Deze API is niet CLS-conform.

Wanneer deze worden overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door een reeks bytes te decoderen die beginnen bij de opgegeven byteaanwijzer.

public:
 virtual int GetCharCount(System::Byte* bytes, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetCharCount(byte* bytes, int count);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetCharCount(byte* bytes, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetCharCount(byte* bytes, int count);
[System.CLSCompliant(false)]
public virtual int GetCharCount(byte* bytes, int count);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
abstract member GetCharCount : nativeptr<byte> * int -> int
override this.GetCharCount : nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetCharCount : nativeptr<byte> * int -> int
override this.GetCharCount : nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetCharCount : nativeptr<byte> * int -> int
override this.GetCharCount : nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
abstract member GetCharCount : nativeptr<byte> * int -> int
override this.GetCharCount : nativeptr<byte> * int -> int

Parameters

bytes
Byte*

Een aanwijzer naar de eerste byte om te decoderen.

count
Int32

Het aantal bytes dat moet worden gedecodeerd.

Retouren

Het aantal tekens dat wordt geproduceerd door de opgegeven reeks bytes te decoderen.

Kenmerken

Uitzonderingen

bytes is null.

count is kleiner dan nul.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Opmerkingen

Als u de exacte matrixgrootte wilt berekenen die GetChars nodig is om de resulterende tekens op te slaan, moet u de GetCharCount methode gebruiken. Als u de maximale matrixgrootte wilt berekenen, gebruikt u de GetMaxCharCount methode. Met de GetCharCount methode kan over het algemeen minder geheugen worden toegewezen, terwijl de GetMaxCharCount methode doorgaans sneller wordt uitgevoerd.

De GetCharCount methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars methode voert de daadwerkelijke decodering uit. De GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden.

  • Als uw app tekenreeksuitvoer verwerkt, is het raadzaam om de GetString methode te gebruiken. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • De byteversie van GetChars(Byte*, Int32, Char*, Int32) maakt een aantal snelle technieken mogelijk, met name bij meerdere aanroepen naar grote buffers. Houd er echter rekening mee dat deze methodeversie soms onveilig is, omdat aanwijzers vereist zijn.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Zie ook

Van toepassing op

GetCharCount(Byte[], Int32, Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, berekent u het aantal tekens dat wordt geproduceerd door het decoderen van een reeks bytes van de opgegeven bytematrix.

public:
 abstract int GetCharCount(cli::array <System::Byte> ^ bytes, int index, int count);
public abstract int GetCharCount(byte[] bytes, int index, int count);
abstract member GetCharCount : byte[] * int * int -> int
Public MustOverride Function GetCharCount (bytes As Byte(), index As Integer, count As Integer) As Integer

Parameters

bytes
Byte[]

De bytematrix met de reeks bytes die moet worden gedecodeerd.

index
Int32

De index van de eerste byte om te decoderen.

count
Int32

Het aantal bytes dat moet worden gedecodeerd.

Retouren

Het aantal tekens dat wordt geproduceerd door de opgegeven reeks bytes te decoderen.

Uitzonderingen

bytes is null.

index of count kleiner is dan nul.

– of –

index en count geef geen geldig bereik aan in bytes.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Voorbeelden

In het volgende voorbeeld wordt een tekenreeks geconverteerd van de ene codering naar de andere.

using System;
using System.Text;

class Example
{
   static void Main()
   {
      string unicodeString = "This string contains the unicode character Pi (\u03a0)";

      // Create two different encodings.
      Encoding ascii = Encoding.ASCII;
      Encoding unicode = Encoding.Unicode;

      // Convert the string into a byte array.
      byte[] unicodeBytes = unicode.GetBytes(unicodeString);

      // Perform the conversion from one encoding to the other.
      byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
         
      // Convert the new byte[] into a char[] and then into a string.
      char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
      ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
      string asciiString = new string(asciiChars);

      // Display the strings created before and after the conversion.
      Console.WriteLine("Original string: {0}", unicodeString);
      Console.WriteLine("Ascii converted string: {0}", asciiString);
   }
}
// The example displays the following output:
//    Original string: This string contains the unicode character Pi (Π)
//    Ascii converted string: This string contains the unicode character Pi (?)
Imports System.Text

Class Example
   Shared Sub Main()
      Dim unicodeString As String = "This string contains the unicode character Pi (" & ChrW(&H03A0) & ")"

      ' Create two different encodings.
      Dim ascii As Encoding = Encoding.ASCII
      Dim unicode As Encoding = Encoding.Unicode

      ' Convert the string into a byte array.
      Dim unicodeBytes As Byte() = unicode.GetBytes(unicodeString)

      ' Perform the conversion from one encoding to the other.
      Dim asciiBytes As Byte() = Encoding.Convert(unicode, ascii, unicodeBytes)

      ' Convert the new byte array into a char array and then into a string.
      Dim asciiChars(ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)-1) As Char
      ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)
      Dim asciiString As New String(asciiChars)

      ' Display the strings created before and after the conversion.
      Console.WriteLine("Original string: {0}", unicodeString)
      Console.WriteLine("Ascii converted string: {0}", asciiString)
   End Sub
End Class
' The example displays the following output:
'    Original string: This string contains the unicode character Pi (Π)
'    Ascii converted string: This string contains the unicode character Pi (?)

In het volgende voorbeeld wordt een tekenreeks gecodeerd in een matrix van bytes en wordt vervolgens een bereik van de bytes gedecodeerd in een matrix met tekens.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Encoding u32LE = Encoding.GetEncoding( "utf-32" );
      Encoding u32BE = Encoding.GetEncoding( "utf-32BE" );

      // Use a string containing the following characters:
      //    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)
      String myStr = "za\u0306\u01FD\u03B2";

      // Encode the string using the big-endian byte order.
      byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
      u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );

      // Encode the string using the little-endian byte order.
      byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
      u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );

      // Get the char counts, decode eight bytes starting at index 0,
      // and print out the counts and the resulting bytes.
      Console.Write( "BE array with BE encoding : " );
      PrintCountsAndChars( barrBE, 0, 8, u32BE );
      Console.Write( "LE array with LE encoding : " );
      PrintCountsAndChars( barrLE, 0, 8, u32LE );
   }

   public static void PrintCountsAndChars( byte[] bytes, int index, int count, Encoding enc )  {

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

      // Display the exact character count.
      int iCC  = enc.GetCharCount( bytes, index, count );
      Console.Write( " {0,-3}", iCC );

      // Display the maximum character count.
      int iMCC = enc.GetMaxCharCount( count );
      Console.Write( " {0,-3} :", iMCC );

      // Decode the bytes and display the characters.
      char[] chars = enc.GetChars( bytes, index, count );

      // The following is an alternative way to decode the bytes:
      // char[] chars = new char[iCC];
      // enc.GetChars( bytes, index, count, chars, 0 );

      Console.WriteLine( chars );
   }
}


/* 
This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.

BE array with BE encoding : System.Text.UTF32Encoding : 2   6   :za
LE array with LE encoding : System.Text.UTF32Encoding : 2   6   :za

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Dim u32LE As Encoding = Encoding.GetEncoding("utf-32")
      Dim u32BE As Encoding = Encoding.GetEncoding("utf-32BE")

      ' Use a string containing the following characters:
      '    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)
      Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2)

      ' Encode the string using the big-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates barrBE with the exact number of elements required.
      Dim barrBE(u32BE.GetByteCount(myStr) - 1) As Byte
      u32BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)

      ' Encode the string using the little-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates barrLE with the exact number of elements required.
      Dim barrLE(u32LE.GetByteCount(myStr) - 1) As Byte
      u32LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)

      ' Get the char counts, decode eight bytes starting at index 0,
      ' and print out the counts and the resulting bytes.
      Console.Write("BE array with BE encoding : ")
      PrintCountsAndChars(barrBE, 0, 8, u32BE)
      Console.Write("LE array with LE encoding : ")
      PrintCountsAndChars(barrLE, 0, 8, u32LE)

   End Sub


   Public Shared Sub PrintCountsAndChars(bytes() As Byte, index As Integer, count As Integer, enc As Encoding)

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

      ' Display the exact character count.
      Dim iCC As Integer = enc.GetCharCount(bytes, index, count)
      Console.Write(" {0,-3}", iCC)

      ' Display the maximum character count.
      Dim iMCC As Integer = enc.GetMaxCharCount(count)
      Console.Write(" {0,-3} :", iMCC)

      ' Decode the bytes.
      Dim chars As Char() = enc.GetChars(bytes, index, count)

      ' The following is an alternative way to decode the bytes:
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      ' Dim chars(iCC - 1) As Char
      ' enc.GetChars( bytes, index, count, chars, 0 )

      ' Display the characters.
      Console.WriteLine(chars)

   End Sub

End Class


'This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.
'
'BE array with BE encoding : System.Text.UTF32Encoding : 2   6   :za
'LE array with LE encoding : System.Text.UTF32Encoding : 2   6   :za

Opmerkingen

Als u de exacte matrixgrootte wilt berekenen die is vereist voor GetChars het opslaan van de resulterende tekens, moet u de GetCharCount methode gebruiken. Als u de maximale matrixgrootte wilt berekenen, gebruikt u de GetMaxCharCount methode. Met de GetCharCount methode kan over het algemeen minder geheugen worden toegewezen, terwijl de GetMaxCharCount methode doorgaans sneller wordt uitgevoerd.

De GetCharCount methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars methode voert de daadwerkelijke decodering uit. De GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden.

  • Als uw app tekenreeksuitvoer verwerkt, is het raadzaam om de GetString methode te gebruiken. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • De byteversie van GetChars(Byte*, Int32, Char*, Int32) maakt een aantal snelle technieken mogelijk, met name bij meerdere aanroepen naar grote buffers. Houd er echter rekening mee dat deze methodeversie soms onveilig is, omdat aanwijzers vereist zijn.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Zie ook

Van toepassing op