Encoder.GetBytes Metoda

Definice

Při přepsání v odvozené třídě zakóduje sadu znaků do posloupnosti bajtů.

Přetížení

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

Pokud je přepsána v odvozené třídě, zakóduje sadu znaků v rozsahu vstupních znaků a všechny znaky ve vnitřní vyrovnávací paměti do sekvence bajtů, které jsou uloženy ve vstupním bajtovém rozsahu. Parametr určuje, zda se má po převodu vymazat vnitřní stav kodéru.

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

Při přepsání v odvozené třídě zakóduje sadu znaků počínaje zadaným ukazatelem znaku a libovolnými znaky ve vnitřní vyrovnávací paměti do sekvence bajtů, které jsou uloženy počínaje zadaným bajtovým ukazatelem. Parametr určuje, zda se má po převodu vymazat vnitřní stav kodéru.

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

Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného pole znaků a libovolných znaků v interní vyrovnávací paměti do zadaného bajtového pole. Parametr určuje, zda se má po převodu vymazat vnitřní stav kodéru.

Poznámky

Pamatujte, že Encoder objekt ukládá stav mezi voláními GetBytes . Když se aplikace provede s datovým proudem dat, měl by parametr při posledním volání nastavit parametr na, aby se flush true GetBytes zajistilo vyprázdnění informací o stavu a aby byly zakódované bajty správně ukončeny. V tomto nastavení kodér ignoruje neplatné bajty na konci datového bloku, jako jsou nespárované náhrady nebo neúplné kombinování sekvencí, a vymaže vnitřní vyrovnávací paměť.

Chcete-li vypočítat přesnou velikost vyrovnávací paměti, která GetBytes vyžaduje uložení výsledných znaků, měla by aplikace použít GetByteCount .

Pokud GetBytes je volána s flush nastavenou na false , kodér ukládá koncové bajty na konci bloku dat ve vnitřní vyrovnávací paměti a použije je při další operaci kódování. Aplikace by měla zavolat GetByteCount na blok dat hned před voláním GetBytes na stejný blok, aby všechny koncové znaky z předchozího bloku byly zahrnuty do výpočtu.

Pokud je aplikace převedena z mnoha segmentů vstupního datového proudu, zvažte použití Convert metody. GetBytes vyvolá výjimku, pokud výstupní vyrovnávací paměť není dostatečně velká, ale Convert vyplní tolik místa jako možnou a vrátí přečtené a zapsané bajty znaků. Další poznámky najdete také v Encoding.GetBytes tématu.

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

Pokud je přepsána v odvozené třídě, zakóduje sadu znaků v rozsahu vstupních znaků a všechny znaky ve vnitřní vyrovnávací paměti do sekvence bajtů, které jsou uloženy ve vstupním bajtovém rozsahu. Parametr určuje, zda se má po převodu vymazat vnitřní stav kodéru.

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>

Rozsah znaků pro kódování.

bytes
Span<Byte>

Bajtový rozsah pro zápis výsledné sekvence bajtů do.

flush
Boolean

true pro vymazání interního stavu kodéru po převodu; v opačném případě false .

Návraty

Int32

Skutečný počet bajtů zapsaných v umístění uvedeném bytes parametrem.

Platí pro

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

Důležité

Toto rozhraní API neodpovídá specifikaci CLS.

Při přepsání v odvozené třídě zakóduje sadu znaků počínaje zadaným ukazatelem znaku a libovolnými znaky ve vnitřní vyrovnávací paměti do sekvence bajtů, které jsou uloženy počínaje zadaným bajtovým ukazatelem. Parametr určuje, zda se má po převodu vymazat vnitřní stav kodéru.

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);
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);
[<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
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

Parametry

chars
Char*

Ukazatel na první znak ke kódování.

charCount
Int32

Počet znaků, které mají být zakódovány.

bytes
Byte*

Ukazatel na umístění, kde má začít zapisovat výslednou sekvenci bajtů.

byteCount
Int32

Maximální počet bajtů, které mají být zapsány.

flush
Boolean

true pro vymazání interního stavu kodéru po převodu; v opačném případě false .

Návraty

Int32

Skutečný počet bajtů zapsaných v umístění uvedeném bytes parametrem.

Atributy

Výjimky

chars je null ( Nothing ).

-nebo-

bytes je null ( Nothing ).

charCount nebo byteCount je menší než nula.

byteCount je menší než výsledný počet bajtů.

Došlo k chybě Fallback (Další informace najdete v tématu kódování znaků v rozhraní .NET).

ani

Fallback je nastaven na EncoderExceptionFallback .

Platí pro

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

Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného pole znaků a libovolných znaků v interní vyrovnávací paměti do zadaného bajtového pole. Parametr určuje, zda se má po převodu vymazat vnitřní stav kodéru.

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[]

Pole znaků obsahující sadu znaků, které mají být zakódovány.

charIndex
Int32

Index prvního znaku, který má být zakódován.

charCount
Int32

Počet znaků, které mají být zakódovány.

bytes
Byte[]

Pole bajtů obsahující výslednou posloupnost bajtů.

byteIndex
Int32

Index, ve kterém se má začít zapisovat výsledná sekvence bajtů.

flush
Boolean

true pro vymazání interního stavu kodéru po převodu; v opačném případě false .

Návraty

Int32

Skutečný počet bajtů zapsaných do bytes .

Výjimky

chars je null ( Nothing ).

-nebo-

bytes je null ( Nothing ).

charIndex nebo charCount byteIndex je menší než nula.

-nebo-

charIndex a charCount neměňte si platný rozsah v chars .

-nebo-

byteIndex není platný index v bytes .

bytes nemá dostatek kapacity od byteIndex do konce pole za účelem přizpůsobení výsledných bajtů.

Došlo k chybě Fallback (Další informace najdete v tématu kódování znaků v rozhraní .NET).

ani

Fallback je nastaven na EncoderExceptionFallback .

Příklady

Následující příklad ukazuje, jak zakódovat rozsah prvků z pole znaků a uložit kódované bajty do rozsahu prvků v bajtovém poli. GetByteCountMetoda se používá k určení velikosti pole, které vyžaduje GetBytes .

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]
'

Platí pro