Encoder.GetBytes Metoda

Definicja

Po zastąpieniu w klasie pochodnej koduje zestaw znaków w sekwencji bajtów.

Przeciążenia

GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean)

Po zastąpieniu w klasie pochodnej koduje zestaw znaków w zakresie znaków wejściowych i wszelkie znaki w buforze wewnętrznym w sekwencji bajtów przechowywanych w zakresie bajtów wejściowych. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji.

GetBytes(Char*, Int32, Byte*, Int32, Boolean)

Po przesłonięciu w klasie pochodnej koduje zestaw znaków rozpoczynający się od określonego wskaźnika znaku i wszystkich znaków w buforze wewnętrznym do sekwencji bajtów, które są przechowywane począwszy od określonego wskaźnika bajtów. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji.

GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean)

Po zastąpieniu w klasie pochodnej koduje zestaw znaków z określonej tablicy znaków i wszystkie znaki w buforze wewnętrznym do określonej tablicy bajtów. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji.

Uwagi

Pamiętaj, że Encoder obiekt zapisuje stan między wywołaniami funkcji GetBytes. Gdy aplikacja jest wykonywana ze strumieniem danych, należy ustawić flush parametr na true w ostatnim wywołaniu, aby GetBytes upewnić się, że informacje o stanie są opróżniane i że zakodowane bajty są prawidłowo zakończone. Dzięki temu ustawieniu koder ignoruje nieprawidłowe bajty na końcu bloku danych, takie jak niedopasowane zastępcze lub niekompletne sekwencje łączące i czyści bufor wewnętrzny.

Aby obliczyć dokładny rozmiar buforu, który GetBytes wymaga przechowywania znaków wynikowych, aplikacja powinna używać polecenia GetByteCount.

Jeśli GetBytes jest wywoływana z ustawioną wartością flushfalse, koder przechowuje końcowe bajty na końcu bloku danych w buforze wewnętrznym i używa ich w następnej operacji kodowania. Aplikacja powinna wywołać GetByteCount blok danych bezpośrednio przed wywołaniem GetBytes tego samego bloku, aby wszystkie końcowe znaki z poprzedniego bloku były uwzględniane w obliczeniach.

Jeśli aplikacja ma konwertować wiele segmentów strumienia wejściowego, rozważ użycie Convert metody . GetBytes Zgłosi wyjątek, jeśli bufor wyjściowy nie jest wystarczająco duży, ale Convert wypełni jak najwięcej miejsca i zwróci znaki odczytane i bajty zapisane. Zobacz też temat, Encoding.GetBytes aby uzyskać więcej komentarzy.

GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean)

Po zastąpieniu w klasie pochodnej koduje zestaw znaków w zakresie znaków wejściowych i wszelkie znaki w buforze wewnętrznym w sekwencji bajtów przechowywanych w zakresie bajtów wejściowych. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji.

public:
 virtual int GetBytes(ReadOnlySpan<char> chars, Span<System::Byte> bytes, bool flush);
public virtual int GetBytes (ReadOnlySpan<char> chars, Span<byte> bytes, bool flush);
abstract member GetBytes : ReadOnlySpan<char> * Span<byte> * bool -> int
override this.GetBytes : ReadOnlySpan<char> * Span<byte> * bool -> int
Public Overridable Function GetBytes (chars As ReadOnlySpan(Of Char), bytes As Span(Of Byte), flush As Boolean) As Integer

Parametry

chars
ReadOnlySpan<Char>

Zakres znaków do kodowania.

bytes
Span<Byte>

Zakres bajtów do zapisania wynikowej sekwencji bajtów.

flush
Boolean

true w celu wyczyszczenia stanu wewnętrznego kodera po konwersji; w przeciwnym razie , false.

Zwraca

Rzeczywista liczba bajtów zapisanych w lokalizacji wskazanej bytes przez parametr .

Dotyczy

GetBytes(Char*, Int32, Byte*, Int32, Boolean)

Ważne

Ten interfejs API nie jest zgodny ze specyfikacją CLS.

Po przesłonięciu w klasie pochodnej koduje zestaw znaków rozpoczynający się od określonego wskaźnika znaku i wszystkich znaków w buforze wewnętrznym do sekwencji bajtów, które są przechowywane począwszy od określonego wskaźnika bajtów. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji.

public:
 virtual int GetBytes(char* chars, int charCount, System::Byte* bytes, int byteCount, bool flush);
[System.CLSCompliant(false)]
public virtual int GetBytes (char* chars, int charCount, byte* bytes, int byteCount, bool flush);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetBytes (char* chars, int charCount, byte* bytes, int byteCount, bool flush);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
[System.Security.SecurityCritical]
public virtual int GetBytes (char* chars, int charCount, byte* bytes, int byteCount, bool flush);
public virtual int GetBytes (char* chars, int charCount, byte* bytes, int byteCount, bool flush);
[<System.CLSCompliant(false)>]
abstract member GetBytes : nativeptr<char> * int * nativeptr<byte> * int * bool -> int
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int * bool -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetBytes : nativeptr<char> * int * nativeptr<byte> * int * bool -> int
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int * bool -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
[<System.Security.SecurityCritical>]
abstract member GetBytes : nativeptr<char> * int * nativeptr<byte> * int * bool -> int
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int * bool -> int
abstract member GetBytes : nativeptr<char> * int * nativeptr<byte> * int * bool -> int
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int * bool -> int

Parametry

chars
Char*

Wskaźnik do pierwszego znaku w celu zakodowania.

charCount
Int32

Liczba znaków do zakodowania.

bytes
Byte*

Wskaźnik do lokalizacji, w której należy rozpocząć pisanie wynikowej sekwencji bajtów.

byteCount
Int32

Maksymalna liczba bajtów do zapisu.

flush
Boolean

true w celu wyczyszczenia stanu wewnętrznego kodera po konwersji; w przeciwnym razie , false.

Zwraca

Rzeczywista liczba bajtów zapisanych w lokalizacji wskazanej bytes przez parametr .

Atrybuty

Wyjątki

chars is null (Nothing).

-lub-

bytes is null (Nothing).

charCount wartość lub byteCount jest mniejsza niż zero.

byteCount jest mniejsza niż wynikowa liczba bajtów.

Wystąpił powrót (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

-I-

Fallback parametr jest ustawiony na EncoderExceptionFallbackwartość .

Dotyczy

GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean)

Po zastąpieniu w klasie pochodnej koduje zestaw znaków z określonej tablicy znaków i wszystkie znaki w buforze wewnętrznym do określonej tablicy bajtów. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji.

public:
 abstract int GetBytes(cli::array <char> ^ chars, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex, bool flush);
public abstract int GetBytes (char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, bool flush);
abstract member GetBytes : char[] * int * int * byte[] * int * bool -> int
Public MustOverride Function GetBytes (chars As Char(), charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer, flush As Boolean) As Integer

Parametry

chars
Char[]

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

charIndex
Int32

Indeks pierwszego znaku do zakodowania.

charCount
Int32

Liczba znaków do zakodowania.

bytes
Byte[]

Tablica bajtów zawierająca wynikową sekwencję bajtów.

byteIndex
Int32

Indeks, na którym należy rozpocząć pisanie wynikowej sekwencji bajtów.

flush
Boolean

true w celu wyczyszczenia stanu wewnętrznego kodera po konwersji; w przeciwnym razie , false.

Zwraca

Rzeczywista liczba bajtów zapisanych w pliku bytes.

Wyjątki

chars is null (Nothing).

-lub-

bytes is null (Nothing).

charIndex lub charCountbyteIndex jest mniejsza niż zero.

-lub-

charIndex i charCount nie oznaczają prawidłowego zakresu w elemecie chars.

-lub-

byteIndex nie jest prawidłowym indeksem w pliku bytes.

bytes nie ma wystarczającej pojemności od byteIndex do końca tablicy, aby pomieścić wynikowe bajty.

Wystąpił powrót (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

-I-

Fallback parametr jest ustawiony na EncoderExceptionFallbackwartość .

Przykłady

W poniższym przykładzie pokazano, jak kodować szereg elementów z tablicy znaków i przechowywać zakodowane bajty w zakresie elementów w tablicy bajtów. Metoda GetByteCount służy do określania rozmiaru tablicy wymaganej przez GetBytesmetodę .

using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   array<Byte>^bytes;
   
   // Unicode characters.
   
   // Pi
   // Sigma
   array<Char>^chars = {L'\u03a0',L'\u03a3',L'\u03a6',L'\u03a9'};
   Encoder^ uniEncoder = Encoding::Unicode->GetEncoder();
   int byteCount = uniEncoder->GetByteCount( chars, 0, chars->Length, true );
   bytes = gcnew array<Byte>(byteCount);
   int bytesEncodedCount = uniEncoder->GetBytes( chars, 0, chars->Length, bytes, 0, true );
   Console::WriteLine( "{0} bytes used to encode characters.", bytesEncodedCount );
   Console::Write( "Encoded bytes: " );
   IEnumerator^ myEnum = bytes->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Byte b = safe_cast<Byte>(myEnum->Current);
      Console::Write( "[{0}]", b );
   }

   Console::WriteLine();
}

/* This code example produces the following output.

8 bytes used to encode characters.
Encoded bytes: [160][3][163][3][166][3][169][3]

*/
using System;
using System.Text;

class EncoderExample {
    public static void Main() {
        Byte[] bytes;
        // Unicode characters.
        Char[] chars = new Char[] {
            '\u0023', // #
            '\u0025', // %
            '\u03a0', // Pi
            '\u03a3'  // Sigma
        };
        
        Encoder uniEncoder = Encoding.Unicode.GetEncoder();
        
        int byteCount = uniEncoder.GetByteCount(chars, 0, chars.Length, true);
        bytes = new Byte[byteCount];
        int bytesEncodedCount = uniEncoder.GetBytes(chars, 0, chars.Length, bytes, 0, true);
        
        Console.WriteLine(
            "{0} bytes used to encode characters.", bytesEncodedCount
        );

        Console.Write("Encoded bytes: ");
        foreach (Byte b in bytes) {
            Console.Write("[{0}]", b);
        }
        Console.WriteLine();
    }
}

/* This code example produces the following output.

8 bytes used to encode characters.
Encoded bytes: [35][0][37][0][160][3][163][3]

*/
Imports System.Text
Imports Microsoft.VisualBasic.Strings

Class EncoderExample
    
    Public Shared Sub Main()
        Dim bytes() As Byte
        ' Unicode characters.
        ' ChrW(35)  = #
        ' ChrW(37)  = %
        ' ChrW(928) = Pi
        ' ChrW(931) = Sigma
        Dim chars() As Char = {ChrW(35), ChrW(37), ChrW(928), ChrW(931)}
        
        Dim uniEncoder As Encoder = Encoding.Unicode.GetEncoder()
        
        Dim byteCount As Integer = _
            uniEncoder.GetByteCount(chars, 0, chars.Length, True)
        bytes = New Byte(byteCount - 1) {}
        Dim bytesEncodedCount As Integer = _
            uniEncoder.GetBytes(chars, 0, chars.Length, bytes, 0, True)
        
        Console.WriteLine( _
            "{0} bytes used to encode characters.", _
            bytesEncodedCount _
        )
        
        Console.Write("Encoded bytes: ")
        Dim b As Byte
        For Each b In  bytes
            Console.Write("[{0}]", b)
        Next b
        Console.WriteLine()
    End Sub
End Class

'This code example produces the following output.
'8 bytes used to encode characters.
'Encoded bytes: [35][0][37][0][160][3][163][3]
'

Dotyczy