Lire en anglais

Partager via


Encoding.GetMaxCharCount(Int32) Méthode

Définition

En cas de substitution dans une classe dérivée, calcule le nombre maximal de caractères produits par le décodage du nombre de caractères spécifié.

C#
public abstract int GetMaxCharCount(int byteCount);

Paramètres

byteCount
Int32

Nombre d'octets à décoder.

Retours

Nombre maximal de caractères produits par le décodage du nombre d'octets spécifié.

Exceptions

byteCount est inférieur à zéro.

Un secours s’est produit (pour plus d’informations, consultez Codage de caractères dans .NET)

-et-

DecoderFallback a la valeur DecoderExceptionFallback.

Exemples

L’exemple suivant encode une chaîne en un tableau d’octets, puis décode les octets en un tableau de caractères.

C#
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ăǽβ

*/

Remarques

Pour calculer la taille exacte du tableau requise par GetChars pour stocker les caractères résultants, vous devez utiliser la GetCharCount méthode. Pour calculer la taille de tableau maximale, utilisez la GetMaxCharCount méthode. La GetCharCount méthode permet généralement d’allouer moins de mémoire, tandis que la GetMaxCharCount méthode s’exécute généralement plus rapidement.

GetMaxCharCountRécupère un nombre de cas le plus défavorable, y compris le pire cas pour le actuellement sélectionné DecoderFallback . Si un secours est choisi avec une chaîne potentiellement grande, GetMaxCharCount récupère des valeurs élevées.

Dans la plupart des cas, cette méthode récupère des nombres raisonnables pour les chaînes de petite taille. Pour les chaînes volumineuses, vous devrez peut-être choisir entre l’utilisation de mémoires tampons de très grande taille et l’interception des erreurs dans les rares cas où une mémoire tampon plus raisonnable est trop petite. Vous pouvez également envisager une approche différente à l’aide de GetCharCount ou de Decoder.Convert .

GetMaxCharCountn’a aucune relation avec GetBytes . Si vous avez besoin d’une fonction similaire à utiliser avec GetBytes , vous devez utiliser GetMaxByteCount .

Lorsque GetMaxCharCount vous utilisez, vous devez allouer la mémoire tampon de sortie en fonction de la taille maximale de la mémoire tampon d’entrée. Si la taille de la mémoire tampon de sortie est restreinte, vous pouvez utiliser la Decoder.Convert méthode.

Notez que GetMaxCharCount considère le pire des cas pour les octets restants d’une précédente opération d’encodeur. Pour la plupart des pages de codes, le passage d’une valeur 0 à cette méthode récupère des valeurs supérieures ou égales à 1.

Note

GetMaxCharCount(N)n’est pas nécessairement la même valeur que N* GetMaxCharCount(1) .

Notes pour les responsables de l’implémentation

Toutes les Encoding implémentations doivent garantir qu’aucune exception de dépassement de mémoire tampon ne se produit si les mémoires tampons sont dimensionnées en fonction des résultats des calculs de cette méthode.

S’applique à

Produit Versions
.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, 10
.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

Voir aussi