UTF32Encoding.GetByteCount Metoda

Definicja

Oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków.

Przeciążenia

GetByteCount(String)

Oblicza liczbę bajtów generowanych przez kodowanie znaków w określonym Stringobiekcie .

GetByteCount(Char*, Int32)

Oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków rozpoczynających się od określonego wskaźnika znaków.

GetByteCount(Char[], Int32, Int32)

Oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków z określonej tablicy znaków.

GetByteCount(String)

Oblicza liczbę bajtów generowanych przez kodowanie znaków w określonym Stringobiekcie .

public:
 override int GetByteCount(System::String ^ s);
public override int GetByteCount (string s);
override this.GetByteCount : string -> int
Public Overrides Function GetByteCount (s As String) As Integer

Parametry

s
String

Element String zawierający zestaw znaków do zakodowania.

Zwraca

Int32

Liczba bajtów generowanych przez kodowanie określonych znaków.

Wyjątki

Wynikowa liczba bajtów jest większa niż maksymalna liczba, którą można zwrócić jako liczbę całkowitą.

Wykrywanie błędów jest włączone i s zawiera nieprawidłową sekwencję znaków.

Wystąpił rezerwowy (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET) -and- EncoderFallback jest ustawiona na EncoderExceptionFallbackwartość .

Przykłady

Poniższy przykład wywołuje GetMaxByteCount metody i GetByteCount(String) w celu obliczenia maksymalnej i rzeczywistej liczby bajtów wymaganych do zakodowania ciągu. Wyświetla również rzeczywistą liczbę bajtów wymaganych do przechowywania strumienia bajtów z znacznikiem kolejności bajtów.

using System;
using System.Text;

class UTF8EncodingExample {
    public static void Main() {
        String chars = "UTF-32 Encoding Example";
        Encoding enc = Encoding.UTF32;

        Console.WriteLine("Bytes needed to encode '{0}':", chars);
        Console.WriteLine("   Maximum:         {0}",
                          enc.GetMaxByteCount(chars.Length));
        Console.WriteLine("   Actual:          {0}",
                          enc.GetByteCount(chars));
        Console.WriteLine("   Actual with BOM: {0}",
                          enc.GetByteCount(chars) + enc.GetPreamble().Length);
    }
}
// The example displays the following output:
//       Bytes needed to encode 'UTF-32 Encoding Example':
//          Maximum:         96
//          Actual:          92
//          Actual with BOM: 96
Imports System.Text

Module Example
    Public Sub Main()
        Dim chars As String = "UTF-32 Encoding Example"
        Dim enc As Encoding = Encoding.UTF32

        Console.WriteLine("Bytes needed to encode '{0}':", chars)
        Console.WriteLine("   Maximum:         {0}",
                          enc.GetMaxByteCount(chars.Length))
        Console.WriteLine("   Actual:          {0}",
                          enc.GetByteCount(chars))
        Console.WriteLine("   Actual with BOM: {0}",
                          enc.GetByteCount(chars) + enc.GetPreamble().Length)
    End Sub
End Module
' The example displays the following output:
'       Bytes needed to encode 'UTF-32 Encoding Example':
'          Maximum:         96
'          Actual:          92
'          Actual with BOM: 96

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetBytes program do przechowywania bajtów wynikowych, należy wywołać metodę GetByteCount . Aby obliczyć maksymalny rozmiar tablicy, należy wywołać metodę GetMaxByteCount . Metoda GetByteCount zwykle przydziela mniej pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

W przypadku wykrywania błędów nieprawidłowa sekwencja powoduje, że ta metoda zgłasza błąd ArgumentException. Bez wykrywania błędów nieprawidłowe sekwencje są ignorowane i nie jest zgłaszany żaden wyjątek.

Aby upewnić się, że zakodowane bajty są prawidłowo dekodowane, gdy są zapisywane jako plik lub jako strumień, można prefiks strumienia zakodowanych bajtów z prefiksem. Wstawienie prezbiory na początku strumienia bajtów (na przykład na początku serii bajtów do zapisania w pliku) jest odpowiedzialnością dewelopera, a liczba bajtów w preficie nie jest odzwierciedlana w wartości zwracanej przez metodę GetByteCount .

Zobacz też

Dotyczy

GetByteCount(Char*, Int32)

Ważne

Ten interfejs API nie jest zgodny ze specyfikacją CLS.

Oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków rozpoczynających się od określonego wskaźnika znaków.

public:
 override int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public override int GetByteCount (char* chars, int count);
[System.CLSCompliant(false)]
public override int GetByteCount (char* chars, int count);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
override this.GetByteCount : nativeptr<char> * int -> int

Parametry

chars
Char*

Wskaźnik do pierwszego znaku w celu zakodowania.

count
Int32

Liczba znaków do kodowania.

Zwraca

Int32

Liczba bajtów generowanych przez kodowanie określonych znaków.

Atrybuty

Wyjątki

chars to null.

Parametr count ma wartość niższą niż zero.

-lub- Wynikowa liczba bajtów jest większa niż maksymalna liczba, którą można zwrócić jako liczbę całkowitą.

Wykrywanie błędów jest włączone i chars zawiera nieprawidłową sekwencję znaków.

Wystąpił rezerwowy (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET) -and- EncoderFallback jest ustawiona na EncoderExceptionFallbackwartość .

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetBytes do przechowywania wynikowych bajtów, należy wywołać metodę GetByteCount . Aby obliczyć maksymalny rozmiar tablicy, należy wywołać metodę GetMaxByteCount. Metoda GetByteCount zazwyczaj przydziela mniej pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

W przypadku wykrywania błędów nieprawidłowa sekwencja powoduje, że ta metoda zgłasza błąd ArgumentException. Bez wykrywania błędów nieprawidłowe sekwencje są ignorowane i nie jest zgłaszany żaden wyjątek.

Aby upewnić się, że zakodowane bajty są prawidłowo dekodowane, gdy są zapisywane jako plik lub strumień, można prefiksować strumień zakodowanych bajtów z preambuły. Wstawienie preambuły na początku strumienia bajtów (na przykład na początku serii bajtów do zapisu w pliku) jest obowiązkiem dewelopera, a liczba bajtów w preambule nie jest odzwierciedlana w wartości zwracanej przez metodę GetByteCount .

Zobacz też

Dotyczy

GetByteCount(Char[], Int32, Int32)

Oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków z określonej tablicy znaków.

public:
 override int GetByteCount(cli::array <char> ^ chars, int index, int count);
public override int GetByteCount (char[] chars, int index, int count);
override this.GetByteCount : char[] * int * int -> int
Public Overrides Function GetByteCount (chars As Char(), index As Integer, count As Integer) As Integer

Parametry

chars
Char[]

Tablica znaków zawierająca zestaw znaków do kodowania.

index
Int32

Indeks pierwszego znaku do kodowania.

count
Int32

Liczba znaków do kodowania.

Zwraca

Int32

Liczba bajtów generowanych przez kodowanie określonych znaków.

Wyjątki

chars to null.

index wartość lub count jest mniejsza niż zero.

-lub- index i count nie oznaczają prawidłowego zakresu w charselemecie .

-lub- Wynikowa liczba bajtów jest większa niż maksymalna liczba, którą można zwrócić jako liczbę całkowitą.

Wykrywanie błędów jest włączone i chars zawiera nieprawidłową sekwencję znaków.

Wystąpił rezerwowy (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET) -and- EncoderFallback jest ustawiona na EncoderExceptionFallbackwartość .

Przykłady

Poniższy przykład wypełnia tablicę wielkimi literami i małymi literami oraz wywołuje GetByteCount(Char[], Int32, Int32) metodę w celu określenia liczby bajtów potrzebnych do kodowania małych liter łacińskich. Następnie wyświetla te informacje wraz z całkowitą liczbą bajtów potrzebnych w przypadku dodania znacznika kolejności bajtów. Porównuje tę liczbę z wartością zwracaną przez metodę GetMaxByteCount , która wskazuje maksymalną liczbę bajtów potrzebnych do kodowania małych liter łacińskich. Poniższy przykład wypełnia tablicę kombinacją znaków greckich i cyrylica i wywołuje GetByteCount(Char[], Int32, Int32) metodę w celu określenia liczby bajtów potrzebnych do zakodowania znaków cyrylica. Następnie wyświetla te informacje wraz z całkowitą liczbą bajtów potrzebnych w przypadku dodania znacznika kolejności bajtów. Porównuje tę liczbę z wartością zwracaną przez metodę GetMaxByteCount , która wskazuje maksymalną liczbę bajtów potrzebnych do zakodowania znaków cyrylica.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      int uppercaseStart = 0x0041;
      int uppercaseEnd = 0x005a;
      int lowercaseStart = 0x0061;
      int lowercaseEnd = 0x007a;
      // Instantiate a UTF8 encoding object with BOM support.
      Encoding enc = Encoding.UTF32;

      // Populate array with characters.
      char[] chars = new char[lowercaseEnd - lowercaseStart + uppercaseEnd - uppercaseStart + 2];
      int index = 0;
      for (int ctr = uppercaseStart; ctr <= uppercaseEnd; ctr++) {
         chars[index] = (char)ctr;
         index++;
      }
      for (int ctr = lowercaseStart; ctr <= lowercaseEnd; ctr++) {
         chars[index] = (char)ctr;
         index++;
      }

      // Display the bytes needed for the lowercase characters.
      Console.WriteLine("Bytes needed for lowercase Latin characters:");
      Console.WriteLine("   Maximum:         {0,5:N0}",
                        enc.GetMaxByteCount(lowercaseEnd - lowercaseStart + 1));
      Console.WriteLine("   Actual:          {0,5:N0}",
                        enc.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                          lowercaseEnd - lowercaseStart + 1));
      Console.WriteLine("   Actual with BOM: {0,5:N0}",
                        enc.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                          lowercaseEnd - lowercaseStart + 1) +
                                          enc.GetPreamble().Length);
   }
}
// The example displays the following output:
//       Bytes needed for lowercase Latin characters:
//          Maximum:           108
//          Actual:            104
//          Actual with BOM:   108
Imports System.Text

Module Example
   Public Sub Main()
      Dim uppercaseStart As Integer = &h0041
      Dim uppercaseEnd As Integer = &h005a
      Dim lowercaseStart As Integer = &h0061
      Dim lowercaseEnd As Integer = &h007a
      ' Instantiate a UTF8 encoding object with BOM support.
      Dim enc As Encoding = Encoding.UTF32
      
      ' Populate array with characters.
      Dim chars(lowercaseEnd - lowercaseStart + uppercaseEnd - uppercaseStart + 1) As Char
      Dim index As Integer = 0
      For ctr As Integer = uppercaseStart To uppercaseEnd
         chars(index) = ChrW(ctr)
         index += 1
      Next
      For ctr As Integer = lowercaseStart To lowercaseEnd
         chars(index) = ChrW(ctr)
         index += 1
      Next

      ' Display the bytes needed for the lowercase characters.
        Console.WriteLine("Bytes needed for lowercase Latin characters:")
        Console.WriteLine("   Maximum:         {0,5:N0}",
                          enc.GetMaxByteCount(lowercaseEnd - lowercaseStart + 1))
        Console.WriteLine("   Actual:          {0,5:N0}",
                          enc.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                            lowercaseEnd - lowercaseStart + 1))
        Console.WriteLine("   Actual with BOM: {0,5:N0}",
                          enc.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                            lowercaseEnd - lowercaseStart + 1) +
                                            enc.GetPreamble().Length)
   End Sub
End Module
' The example displays the following output:
'       Bytes needed for lowercase Latin characters:
'          Maximum:           108
'          Actual:            104
'          Actual with BOM:   108

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetBytes do przechowywania wynikowych bajtów, należy wywołać metodę GetByteCount . Aby obliczyć maksymalny rozmiar tablicy, należy wywołać metodę GetMaxByteCount . Metoda GetByteCount zazwyczaj przydziela mniej pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

W przypadku wykrywania błędów nieprawidłowa sekwencja powoduje, że ta metoda zgłasza błąd ArgumentException. Bez wykrywania błędów nieprawidłowe sekwencje są ignorowane i nie jest zgłaszany żaden wyjątek.

Aby upewnić się, że zakodowane bajty są prawidłowo dekodowane, gdy są zapisywane jako plik lub strumień, można prefiksować strumień zakodowanych bajtów z preambuły. Wstawienie preambuły na początku strumienia bajtów (na przykład na początku serii bajtów do zapisu w pliku) jest obowiązkiem dewelopera, a liczba bajtów w preambule nie jest odzwierciedlana w wartości zwracanej przez metodę GetByteCount .

Zobacz też

Dotyczy