Sdílet prostřednictvím


Decoder.GetChars Metoda

Definice

Při přepsání v odvozené třídě dekóduje sekvenci bajtů do sady znaků.

Přetížení

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

Při přepsání v odvozené třídě dekóduje posloupnost bajtů span a všech bajtů v interní vyrovnávací paměti do sady znaků, které jsou uloženy od zadaného ukazatele znaku. Parametr určuje, zda se má po převodu vymazat vnitřní stav dekodéru.

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

Při přepsání v odvozené třídě dekóduje posloupnost bajtů začínající na zadaném bajtovém ukazateli a všechny bajty v interní vyrovnávací paměti do sady znaků, které jsou uloženy od zadaného ukazatele znaků. Parametr určuje, zda se má po převodu vymazat vnitřní stav dekodéru.

GetChars(Byte[], Int32, Int32, Char[], Int32)

Při přepsání v odvozené třídě dekóduje posloupnost bajtů ze zadaného pole bajtů a všech bajtů v interní vyrovnávací paměti do zadané pole znaků.

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

Při přepsání v odvozené třídě dekóduje posloupnost bajtů ze zadaného pole bajtů a všech bajtů v interní vyrovnávací paměti do zadané pole znaků. Parametr určuje, zda se má po převodu vymazat vnitřní stav dekodéru.

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

Zdroj:
Decoder.cs
Zdroj:
Decoder.cs
Zdroj:
Decoder.cs

Při přepsání v odvozené třídě dekóduje posloupnost bajtů span a všech bajtů v interní vyrovnávací paměti do sady znaků, které jsou uloženy od zadaného ukazatele znaku. Parametr určuje, zda se má po převodu vymazat vnitřní stav dekodéru.

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

Parametry

bytes
ReadOnlySpan<Byte>

Bajtové rozpětí pro dekódování.

chars
Span<Char>

Rozsah pro zápis výsledné sady znaků.

flush
Boolean

truevyčistit vnitřní stav dekodéru po převodu; v opačném případě . false

Návraty

Skutečný počet znaků napsaný v rozsahu určeném parametrem chars .

Poznámky

Nezapomeňte, že Decoder objekt ukládá stav mezi voláními objektu GetChars. Když je aplikace hotová s datovým proudem, měla by nastavit flush parametr na hodnotu, true aby se zajistilo, že se informace o stavu vyprázdní. Při tomto nastavení dekodér ignoruje neplatné bajty na konci datového bloku a vymaže interní vyrovnávací paměť.

K výpočtu přesné velikosti rozsahu, která GetChars vyžaduje uložení výsledných znaků, by aplikace měla použít GetCharCount.

Pokud GetChars je volána s flush nastavenou na false, dekodér uloží koncové bajty na konci datového bloku do interní vyrovnávací paměti a použije je v další dekódovací operaci. Aplikace by měla volat GetCharCount na blok dat bezprostředně před voláním GetChars stejného bloku, aby všechny koncové bajty z předchozího bloku byly zahrnuty do výpočtu.

Pokud má vaše aplikace převést mnoho segmentů vstupního streamu, zvažte použití Convert metody . GetChars vyvolá výjimku, pokud výstupní rozsah není dostatečně velký, ale Convert zaplní co nejvíce místa a vrátí přečtené bajty a zapsané znaky za předpokladu, že pole výstupu umožňuje alespoň dva znaky. Další komentáře najdete také v Encoding.GetChars tématu.

Platí pro

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

Zdroj:
Decoder.cs
Zdroj:
Decoder.cs
Zdroj:
Decoder.cs

Důležité

Toto rozhraní API neodpovídá specifikaci CLS.

Při přepsání v odvozené třídě dekóduje posloupnost bajtů začínající na zadaném bajtovém ukazateli a všechny bajty v interní vyrovnávací paměti do sady znaků, které jsou uloženy od zadaného ukazatele znaků. Parametr určuje, zda se má po převodu vymazat vnitřní stav dekodéru.

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

Parametry

bytes
Byte*

Ukazatel na první bajt, který chcete dekódovat.

byteCount
Int32

Počet bajtů k dekódování.

chars
Char*

Ukazatel na umístění, na kterém chcete začít psát výslednou sadu znaků.

charCount
Int32

Maximální počet znaků, které se mají napsat.

flush
Boolean

truevyčistit vnitřní stav dekodéru po převodu; v opačném případě . false

Návraty

Skutečný počet znaků napsaných v umístění určeném parametrem chars .

Atributy

Výjimky

bytes je null (Nothing).

-nebo-

chars je null (Nothing).

byteCount nebo charCount je menší než nula.

charCount je menší než výsledný počet znaků.

Došlo k náhradnímu řešení (další informace najdete v tématu Kódování znaků v .NET).

-A-

Fallback je nastavená na DecoderExceptionFallbackhodnotu .

Poznámky

Nezapomeňte, že Decoder objekt ukládá stav mezi voláními objektu GetChars. Když je aplikace hotová s datovým proudem, měla by nastavit flush parametr na hodnotu, true aby se zajistilo, že se informace o stavu vyprázdní. Při tomto nastavení dekodér ignoruje neplatné bajty na konci datového bloku a vymaže interní vyrovnávací paměť.

K výpočtu přesné velikosti vyrovnávací paměti, která GetChars je nutná k uložení výsledných znaků, by aplikace měla použít GetCharCount.

Pokud GetChars je volána s flush nastavenou na false, dekodér uloží koncové bajty na konci datového bloku do interní vyrovnávací paměti a použije je v další dekódovací operaci. Aplikace by měla volat GetCharCount na blok dat bezprostředně před voláním GetChars stejného bloku, aby všechny koncové bajty z předchozího bloku byly zahrnuty do výpočtu.

Pokud má vaše aplikace převést mnoho segmentů vstupního streamu, zvažte použití Convert metody . GetChars vyvolá výjimku, pokud výstupní vyrovnávací paměť není dostatečně velká, ale Convert zaplní co nejvíce místa a vrátí přečtené bajty a zapsané znaky za předpokladu, že výstupní pole umožňuje alespoň dva znaky. Další komentáře najdete také v Encoding.GetChars tématu.

Viz také

Platí pro

GetChars(Byte[], Int32, Int32, Char[], Int32)

Zdroj:
Decoder.cs
Zdroj:
Decoder.cs
Zdroj:
Decoder.cs

Při přepsání v odvozené třídě dekóduje posloupnost bajtů ze zadaného pole bajtů a všech bajtů v interní vyrovnávací paměti do zadané pole znaků.

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

Parametry

bytes
Byte[]

Pole bajtů obsahující posloupnost bajtů, které se mají dekódovat.

byteIndex
Int32

Index prvního bajtu, který se má dekódovat.

byteCount
Int32

Počet bajtů k dekódování.

chars
Char[]

Pole znaků, které má obsahovat výslednou sadu znaků.

charIndex
Int32

Index, ve kterém se má začít psát výsledná sada znaků.

Návraty

Skutečný počet znaků zapsaných do chars.

Výjimky

bytes je null (Nothing).

-nebo-

chars je null (Nothing).

byteIndex nebo byteCountcharIndex je menší než nula.

-nebo-

byteindex a byteCount neoznamujte platnou oblast v bytessouboru .

-nebo-

charIndex není platný index v nástroji chars.

chars nemá dostatečnou kapacitu od charIndex konce pole pro umístění výsledných znaků.

Došlo k náhradnímu řešení (další informace najdete v tématu Kódování znaků v .NET).

-A-

Fallback je nastavená na DecoderExceptionFallbackhodnotu .

Příklady

Následující příklad ukazuje, jak dekódovat oblast prvků z pole bajtů a uložit je do pole znaků Unicode. Metoda GetCharCount se používá k výpočtu počtu znaků potřebných k uložení dekódovaných prvků v poli bytes. Metoda GetChars dekóduje zadané prvky v bajtovém poli a uloží je do nového pole znaků.

using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   array<Char>^chars;
   array<Byte>^bytes = {85,0,110,0,105,0,99,0,111,0,100,0,101,0};
   Decoder^ uniDecoder = Encoding::Unicode->GetDecoder();
   int charCount = uniDecoder->GetCharCount( bytes, 0, bytes->Length );
   chars = gcnew array<Char>(charCount);
   int charsDecodedCount = uniDecoder->GetChars( bytes, 0, bytes->Length, chars, 0 );
   Console::WriteLine( "{0} characters used to decode bytes.", charsDecodedCount );
   Console::Write( "Decoded chars: " );
   IEnumerator^ myEnum = chars->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Char c = safe_cast<Char>(myEnum->Current);
      Console::Write( "[{0}]", c.ToString() );
   }

   Console::WriteLine();
}

/* This code example produces the following output.

7 characters used to decode bytes.
Decoded chars: [U][n][i][c][o][d][e]

*/
using System;
using System.Text;

class UnicodeEncodingExample {
    public static void Main() {
        Char[] chars;
        Byte[] bytes = new Byte[] {
            85, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0
        };

        Decoder uniDecoder = Encoding.Unicode.GetDecoder();

        int charCount = uniDecoder.GetCharCount(bytes, 0, bytes.Length);
        chars = new Char[charCount];
        int charsDecodedCount = uniDecoder.GetChars(bytes, 0, bytes.Length, chars, 0);

        Console.WriteLine(
            "{0} characters used to decode bytes.", charsDecodedCount
        );

        Console.Write("Decoded chars: ");
        foreach (Char c in chars) {
            Console.Write("[{0}]", c);
        }
        Console.WriteLine();
    }
}

/* This code example produces the following output.

7 characters used to decode bytes.
Decoded chars: [U][n][i][c][o][d][e]

*/
Imports System.Text

Class UnicodeEncodingExample
    
    Public Shared Sub Main()
        Dim chars() As Char
        Dim bytes() As Byte = { _
            85, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0 _
        }
        
        Dim uniDecoder As Decoder = Encoding.Unicode.GetDecoder()
        
        Dim charCount As Integer = uniDecoder.GetCharCount(bytes, 0, bytes.Length)
        chars = New Char(charCount - 1) {}
        Dim charsDecodedCount As Integer = _
            uniDecoder.GetChars(bytes, 0, bytes.Length, chars, 0)
        
        Console.WriteLine( _
            "{0} characters used to decode bytes.", _
            charsDecodedCount _
        )
        
        Console.Write("Decoded chars: ")
        Dim c As Char
        For Each c In  chars
            Console.Write("[{0}]", c)
        Next c
        Console.WriteLine()
    End Sub
End Class

'This code example produces the following output.
'
'7 characters used to decode bytes.
'Decoded chars: [U][n][i][c][o][d][e]
'

Poznámky

Nezapomeňte, že Decoder objekt ukládá stav mezi voláními objektu GetChars. Když je aplikace hotová s datovým proudem, měla by nastavit flush parametr na hodnotu, true aby se zajistilo, že se informace o stavu vyprázdní. Při tomto nastavení dekodér ignoruje neplatné bajty na konci datového bloku a vymaže interní vyrovnávací paměť.

K výpočtu přesné velikosti pole, která GetChars je nutná k uložení výsledných znaků, by aplikace měla použít GetCharCount.

Pokud GetChars je volána s flush nastavenou na false, dekodér uloží koncové bajty na konci datového bloku do interní vyrovnávací paměti a použije je v další dekódovací operaci. Aplikace by měla volat GetCharCount na blok dat bezprostředně před voláním GetChars stejného bloku, aby všechny koncové bajty z předchozího bloku byly zahrnuty do výpočtu.

Pokud má vaše aplikace převést mnoho segmentů vstupního streamu, zvažte použití Convert metody . GetChars vyvolá výjimku, pokud výstupní vyrovnávací paměť není dostatečně velká, ale Convert zaplní co nejvíce místa a vrátí přečtené bajty a zapsané znaky za předpokladu, že výstupní pole umožňuje alespoň dva znaky. Další komentáře najdete také v Encoding.GetChars tématu.

Viz také

Platí pro

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

Zdroj:
Decoder.cs
Zdroj:
Decoder.cs
Zdroj:
Decoder.cs

Při přepsání v odvozené třídě dekóduje posloupnost bajtů ze zadaného pole bajtů a všechny bajty v interní vyrovnávací paměti do zadaného pole znaků. Parametr určuje, zda se má vymazat vnitřní stav dekodéru po převodu.

public:
 virtual int GetChars(cli::array <System::Byte> ^ bytes, int byteIndex, int byteCount, cli::array <char> ^ chars, int charIndex, bool flush);
public virtual int GetChars (byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex, bool flush);
abstract member GetChars : byte[] * int * int * char[] * int * bool -> int
override this.GetChars : byte[] * int * int * char[] * int * bool -> int
Public Overridable Function GetChars (bytes As Byte(), byteIndex As Integer, byteCount As Integer, chars As Char(), charIndex As Integer, flush As Boolean) As Integer

Parametry

bytes
Byte[]

Pole bajtů obsahující posloupnost bajtů k dekódování.

byteIndex
Int32

Index prvního bajtu k dekódování.

byteCount
Int32

Počet bajtů k dekódování.

chars
Char[]

Pole znaků, které má obsahovat výslednou sadu znaků.

charIndex
Int32

Index, ve kterém chcete začít psát výslednou sadu znaků.

flush
Boolean

truek vymazání vnitřního stavu dekodéru po převodu; v opačném případě . false

Návraty

Skutečný počet znaků zapsaných do parametru chars .

Výjimky

bytes je null (Nothing).

-nebo-

chars je null (Nothing).

byteIndex nebo byteCountcharIndex je menší než nula.

-nebo-

byteindex a byteCount neoznamujte platnou oblast v bytessouboru .

-nebo-

charIndex není platný index v nástroji chars.

chars nemá dostatečnou kapacitu od charIndex do konce pole pro umístění výsledných znaků.

Došlo k náhradnímu použití (další informace najdete v tématu Kódování znaků v .NET)

-A-

Fallback je nastavená na DecoderExceptionFallbackhodnotu .

Poznámky

Mějte na paměti Decoder , že objekt ukládá stav mezi voláními objektu GetChars. Když aplikace dokončí stream dat, měla by nastavit flush parametr na , true aby se zajistilo vyprázdnění informací o stavu. Při tomto nastavení dekodér ignoruje neplatné bajty na konci datového bloku a vymaže vnitřní vyrovnávací paměť.

K výpočtu přesné velikosti pole, která GetChars je nutná k uložení výsledných znaků, by aplikace měla použít GetCharCount.

Pokud GetChars je volána s flush nastavenou na false, dekodér ukládá koncové bajty na konci bloku dat do interní vyrovnávací paměti a použije je v další dekódovací operaci. Aplikace by měla volat GetCharCount blok dat bezprostředně před voláním GetChars stejného bloku, aby se do výpočtu zahrnuly všechny koncové bajty z předchozího bloku.

Pokud má vaše aplikace převést mnoho segmentů vstupního streamu, zvažte použití Convert metody . GetChars vyvolá výjimku, pokud výstupní vyrovnávací paměť není dostatečně velká, ale Convert zaplní co nejvíce místa a vrátí přečtené bajty a zapsané znaky za předpokladu, že výstupní pole umožňuje alespoň dva znaky. Další komentáře najdete také v Encoding.GetChars tématu.

Viz také

Platí pro