Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Encoding.GetMaxCharCount-Methode: (Int32)

 

Veröffentlicht: Oktober 2016

Berechnet beim Überschreiben in einer abgeleiteten Klasse die maximale Anzahl an Zeichen, die beim Decodieren der angegebenen Anzahl von Bytes erzeugt werden.

Namespace:   System.Text
Assembly:  mscorlib (in mscorlib.dll)

public abstract int GetMaxCharCount(
	int byteCount
)

Parameter

byteCount
Type: System.Int32

Die Anzahl der zu decodierenden Bytes.

Rückgabewert

Type: System.Int32

Die maximale Anzahl von Zeichen, die beim Decodieren der angegebenen Anzahl von Bytes erzeugt werden.

Exception Condition
ArgumentOutOfRangeException

byteCount ist kleiner als Null.

DecoderFallbackException

Ein Fallback ist aufgetreten (ausführliche Erklärung siehe Zeichencodierung in .NET Framework).

- und -

Für DecoderFallback ist DecoderExceptionFallback festgelegt.

Zum Berechnen der genauen Arraygröße GetChars zum Speichern der resultierenden Zeichen verwenden Sie die GetCharCount Methode. Um die maximale Arraygröße zu berechnen, verwenden Sie die GetMaxCharCount Methode. Die GetCharCount Methode können im Allgemeinen weniger Speicher, während die GetMaxCharCount -Methode in der Regel schneller ausgeführt wird.

GetMaxCharCount Ruft die maximal zu erwartende, einschließlich den ungünstigsten Fall für den zurzeit ausgewählten DecoderFallback. Wenn ein Fallback mit einer potenziell großen Zeichenfolge ausgewählt wird GetMaxCharCount Ruft große Werte ab.

In den meisten Fällen ruft diese Methode geeignete Zahlen für kleine Zeichenfolgen. Bei großen Zeichenfolgen müssen Sie möglicherweise entscheiden, ob sehr große Puffer und Abfangen von Fehlern in dem seltenen Fall, dass ein angemessener Puffer zu klein ist. Sie möchten möglicherweise auch sollten einen weiteren Ansatz mit GetCharCount oder Decoder.Convert.

GetMaxCharCount hat keinen Bezug zu GetBytes. Wenn Sie eine ähnliche Funktion mit benötigt GetBytes, verwenden Sie GetMaxByteCount.

Verwendung von GetMaxCharCount, sollten Sie den Ausgabepuffer anhand der maximalen Größe des Eingabepuffers zuweisen. Wenn der Ausgabepuffer Größe beschränkt ist, können Sie die Decoder.Convert Methode.

Beachten Sie, dass GetMaxCharCount berücksichtigt den ungünstigsten Fall für übrig gebliebene Bytes aus vorhergehenden Codierungsvorgängen. Bei den meisten Codepages ruft diese Methode einen Wert von 0 übergeben Werte größer als oder gleich 1 ab.

System_CAPS_noteHinweis

GetMaxCharCount(N) ist nicht unbedingt der gleiche Wert wie N* GetMaxCharCount(1).

Hinweise für Implementierer:

Alle Encoding Implementierungen müssen sicherstellen, dass keine Ausnahmen durch Pufferüberlauf auftreten, wenn die Ergebnisse von dieser Methode Berechnungen Puffer angepasst werden.

Im folgenden Beispiel wird eine Zeichenfolge in ein Bytearray codiert, und anschließend die Bytes in ein Array von Zeichen decodiert.

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  :za??�
LE array with LE encoding : System.Text.UTF32Encoding : 5   12  :za??�

*/

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: