UTF32Encoding.GetChars Methode

Definitie

Decodeert een reeks bytes in een reeks tekens.

Overloads

Name Description
GetChars(Byte*, Int32, Char*, Int32)

Decodeert een reeks bytes die beginnen bij de opgegeven byteaanwijzer in een set tekens die zijn opgeslagen vanaf de opgegeven tekenaanwijzer.

GetChars(Byte[], Int32, Int32, Char[], Int32)

Decodeert een reeks bytes van de opgegeven bytematrix in de opgegeven tekenmatrix.

GetChars(Byte*, Int32, Char*, Int32)

Belangrijk

Deze API is niet CLS-conform.

Decodeert een reeks bytes die beginnen bij de opgegeven byteaanwijzer in een set tekens die zijn opgeslagen vanaf de opgegeven tekenaanwijzer.

public:
 override int GetChars(System::Byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public override int GetChars(byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
public override int GetChars(byte* bytes, int byteCount, char* chars, int charCount);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int

Parameters

bytes
Byte*

Een aanwijzer naar de eerste byte om te decoderen.

byteCount
Int32

Het aantal bytes dat moet worden gedecodeerd.

chars
Char*

Een aanwijzer naar de locatie waar de resulterende set tekens moet worden geschreven.

charCount
Int32

Het maximum aantal tekens dat moet worden geschreven.

Retouren

Het werkelijke aantal tekens dat is geschreven op de locatie aangegeven door chars.

Kenmerken

Uitzonderingen

bytes is null.

– of –

chars is null.

byteCount of charCount kleiner is dan nul.

Foutdetectie is ingeschakeld en bytes bevat een ongeldige reeks bytes.

– of –

charCount is kleiner dan het resulterende aantal tekens.

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 nodig is om GetChars de resulterende tekens op te slaan, roept u de GetCharCount methode aan. 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.

Als het bereik van bytes dat moet worden gedecodeerd, de bytevolgordemarkering (BOM) bevat en de bytematrix is geretourneerd door een methode van een niet-bombewust type, wordt het teken U+FFFE opgenomen in de tekenmatrix die door deze methode wordt geretourneerd. U kunt deze verwijderen door de String.TrimStart methode aan te roepen.

Gegevens die moeten worden geconverteerd, zoals gegevens die uit een stroom worden gelezen, zijn mogelijk alleen in opeenvolgende blokken beschikbaar. In dit geval, of als de hoeveelheid gegevens zo groot is dat deze moet worden onderverdeeld in kleinere blokken, gebruikt de toepassing respectievelijk de DecoderEncoder door de GetDecoder methode of de GetEncoder methode opgegeven methode.

Zie ook

Van toepassing op

GetChars(Byte[], Int32, Int32, Char[], Int32)

Decodeert een reeks bytes van de opgegeven bytematrix in de opgegeven tekenmatrix.

public:
 override int GetChars(cli::array <System::Byte> ^ bytes, int byteIndex, int byteCount, cli::array <char> ^ chars, int charIndex);
public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex);
override this.GetChars : byte[] * int * int * char[] * int -> int
Public Overrides Function GetChars (bytes As Byte(), byteIndex As Integer, byteCount As Integer, chars As Char(), charIndex As Integer) As Integer

Parameters

bytes
Byte[]

De bytematrix met de reeks bytes die moet worden gedecodeerd.

byteIndex
Int32

De index van de eerste byte om te decoderen.

byteCount
Int32

Het aantal bytes dat moet worden gedecodeerd.

chars
Char[]

De tekenmatrix die de resulterende set tekens bevat.

charIndex
Int32

De index waarop de resulterende set tekens moet worden geschreven.

Retouren

Het werkelijke aantal tekens dat is geschreven in chars.

Uitzonderingen

bytes is null.

– of –

chars is null.

byteIndex of byteCountcharIndex kleiner is dan nul.

– of –

byteIndex en byteCount geef geen geldig bereik aan in bytes.

– of –

charIndex is geen geldige index in chars.

Foutdetectie is ingeschakeld en bytes bevat een ongeldige reeks bytes.

– of –

chars heeft niet voldoende capaciteit van charIndex tot het einde van de matrix voor de resulterende tekens.

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

Als u de exacte matrixgrootte wilt berekenen die nodig is om GetChars de resulterende tekens op te slaan, roept u de GetCharCount methode aan. 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.

Als het bereik van bytes dat moet worden gedecodeerd, de bytevolgordemarkering (BOM) bevat en de bytematrix is geretourneerd door een methode van een niet-bombewust type, wordt het teken U+FFFE opgenomen in de tekenmatrix die door deze methode wordt geretourneerd. U kunt deze verwijderen door de String.TrimStart methode aan te roepen.

Gegevens die moeten worden geconverteerd, zoals gegevens die uit een stroom worden gelezen, zijn mogelijk alleen in opeenvolgende blokken beschikbaar. In dit geval, of als de hoeveelheid gegevens zo groot is dat deze moet worden onderverdeeld in kleinere blokken, gebruikt de toepassing respectievelijk de DecoderEncoder door de GetDecoder methode of de GetEncoder methode opgegeven methode.

Zie ook

Van toepassing op