UTF32Encoding.GetCharCount Methode

Definitie

Berekent het aantal tekens dat wordt geproduceerd door een reeks bytes te decoderen.

Overloads

Name Description
GetCharCount(Byte[], Int32, Int32)

Berekent het aantal tekens dat wordt geproduceerd door het decoderen van een reeks bytes van de opgegeven bytematrix.

GetCharCount(Byte*, Int32)

Berekent het aantal tekens dat wordt geproduceerd door het decoderen van een reeks bytes die beginnen bij de opgegeven byteaanwijzer.

GetCharCount(Byte[], Int32, Int32)

Berekent het aantal tekens dat wordt geproduceerd door het decoderen van een reeks bytes van de opgegeven bytematrix.

public:
 override int GetCharCount(cli::array <System::Byte> ^ bytes, int index, int count);
public override int GetCharCount(byte[] bytes, int index, int count);
override this.GetCharCount : byte[] * int * int -> int
Public Overrides 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.

– of –

Het resulterende aantal bytes is groter dan het maximumaantal dat als geheel getal kan worden geretourneerd.

Foutdetectie is ingeschakeld en bytes bevat een ongeldige reeks 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 gecodeerd in een matrix van bytes en worden de bytes vervolgens gedecodeerd in een matrix met tekens.

using System;
using System.Text;

public class SamplesUTF32Encoding  {

   public static void Main()  {

      // Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      UTF32Encoding u32LE = new UTF32Encoding( false, true, true );
      UTF32Encoding u32BE = new UTF32Encoding( true, true, true );

      // Create byte arrays from the same 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)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";

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

      // barrLE uses 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 );

      // Decode the byte arrays using an encoding with a different byte order.
      Console.Write( "BE array with LE encoding : " );
      try  {
         PrintCountsAndChars( barrBE, u32LE );
      }
      catch ( System.ArgumentException e )  {
         Console.WriteLine( e.Message );
      }

      Console.Write( "LE array with BE encoding : " );
      try  {
         PrintCountsAndChars( barrLE, u32BE );
      }
      catch ( System.ArgumentException e )  {
         Console.WriteLine( e.Message );
      }
   }

   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 = new char[iCC];
      enc.GetChars( bytes, 0, bytes.Length, chars, 0 );
      Console.WriteLine( chars );
   }
}
Imports System.Text

Public Class SamplesUTF32Encoding   

   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 New UTF32Encoding(False, True, True)
      Dim u32BE As New UTF32Encoding(True, True, True)


      ' Create byte arrays from the same 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)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)

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

      ' barrLE uses the little-endian byte order.
      ' NOTE: In Visual Basic, arrays contain one extra element by default.
      '       The following line creates an 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)


      ' Decode the byte arrays using an encoding with a different byte order.
      Console.Write("BE array with LE encoding : ")
      Try
         PrintCountsAndChars(barrBE, u32LE)
      Catch e As System.ArgumentException
         Console.WriteLine(e.Message)
      End Try

      Console.Write("LE array with BE encoding : ")
      Try
         PrintCountsAndChars(barrLE, u32BE)
      Catch e As System.ArgumentException
         Console.WriteLine(e.Message)
      End Try

   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(iCC) As Char
      enc.GetChars(bytes, 0, bytes.Length, chars, 0)
      Console.WriteLine(chars)

   End Sub

End Class

Opmerkingen

De GetCharCount methode berekent de exacte matrixgrootte die door de GetChars methode is vereist om de resulterende tekens op te slaan. Als u de maximale matrixgrootte wilt berekenen, roept u de GetMaxCharCount methode aan. De GetCharCount methode wijst doorgaans minder geheugen toe, terwijl de GetMaxCharCount methode over het algemeen sneller wordt uitgevoerd.

Bij foutdetectie zorgt een ongeldige reeks ervoor dat deze methode een ArgumentException. Zonder foutdetectie worden ongeldige reeksen genegeerd en wordt er geen uitzondering gegenereerd.

Zie ook

Van toepassing op

GetCharCount(Byte*, Int32)

Belangrijk

Deze API is niet CLS-conform.

Berekent het aantal tekens dat wordt geproduceerd door het decoderen van een reeks bytes die beginnen bij de opgegeven byteaanwijzer.

public:
 override int GetCharCount(System::Byte* bytes, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public override int GetCharCount(byte* bytes, int count);
[System.CLSCompliant(false)]
public override int GetCharCount(byte* bytes, int count);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
override this.GetCharCount : nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
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.

– of –

Het resulterende aantal bytes is groter dan het maximumaantal dat als geheel getal kan worden geretourneerd.

Foutdetectie is ingeschakeld en bytes bevat een ongeldige reeks bytes.

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

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Opmerkingen

GetCharCount berekent de exacte matrixgrootte die door de GetChars methode is vereist om de resulterende tekens op te slaan. Als u de maximale matrixgrootte wilt berekenen, roept u de GetMaxCharCount methode aan. De GetCharCount methode wijst doorgaans minder geheugen toe, terwijl de GetMaxCharCount methode over het algemeen sneller wordt uitgevoerd.

Bij foutdetectie zorgt een ongeldige reeks ervoor dat deze methode een ArgumentException. Zonder foutdetectie worden ongeldige reeksen genegeerd en wordt er geen uitzondering gegenereerd.

Zie ook

Van toepassing op