Sdílet prostřednictvím


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)

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

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

Při přepsání v odvozené třídě zakóduje množinu znaků začínajících na zadaném znakovém ukazateli a všechny znaky v interní vyrovnávací paměti do posloupnosti bajtů, které jsou uloženy od zadaného ukazatele bajtů. Parametr určuje, jestli se má vymazat interní stav kodéru po převodu.

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 všechny znaky v interní vyrovnávací paměti do zadaného pole bajtů. Parametr určuje, jestli se má vymazat interní stav kodéru po převodu.

Poznámky

Mějte na paměti Encoder , že objekt ukládá stav mezi voláními objektu GetBytes. Když je aplikace hotová se streamem dat, měla by při posledním volání GetBytes nastavit flush parametr na , true aby se zajistilo, že informace o stavu jsou vyprázdněné a že kódované bajty jsou správně ukončeny. Při tomto nastavení kodér ignoruje neplatné bajty na konci bloku dat, jako jsou chybějící náhradníky nebo neúplné kombinační sekvence, a vymaže vnitřní vyrovnávací paměť.

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

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

Pokud má vaše aplikace převést mnoho segmentů vstupního streamu, zvažte použití Convert metody . GetBytes 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é znaky a zapsané bajty. Další komentáře najdete také v Encoding.GetBytes tématu.

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

Zdroj:
Encoder.cs
Zdroj:
Encoder.cs
Zdroj:
Encoder.cs

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

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ů, který se má kódovat.

bytes
Span<Byte>

Rozsah bajtů, do které se zapisuje výsledná posloupnost bajtů.

flush
Boolean

truevymazat vnitřní stav kodéru po převodu; v opačném případě . false

Návraty

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

Platí pro

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

Zdroj:
Encoder.cs
Zdroj:
Encoder.cs
Zdroj:
Encoder.cs

Důležité

Toto rozhraní API neodpovídá specifikaci CLS.

Při přepsání v odvozené třídě zakóduje množinu znaků začínajících na zadaném znakovém ukazateli a všechny znaky v interní vyrovnávací paměti do posloupnosti bajtů, které jsou uloženy od zadaného ukazatele bajtů. Parametr určuje, jestli se má vymazat interní stav kodéru po převodu.

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

Parametry

chars
Char*

Ukazatel na první znak, který se má zakódovat.

charCount
Int32

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

bytes
Byte*

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

byteCount
Int32

Maximální počet bajtů k zápisu.

flush
Boolean

truevymazat vnitřní stav kodéru po převodu; v opačném případě . false

Návraty

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

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 náhradnímu použití (další informace najdete v tématu Kódování znaků v .NET)

-A-

Fallback je nastavená na EncoderExceptionFallbackhodnotu .

Platí pro

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

Zdroj:
Encoder.cs
Zdroj:
Encoder.cs
Zdroj:
Encoder.cs

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

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é se mají zakódovat.

charIndex
Int32

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

charCount
Int32

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

bytes
Byte[]

Bajtové pole, které bude obsahovat výslednou posloupnost bajtů.

byteIndex
Int32

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

flush
Boolean

truevymazat vnitřní stav kodéru po převodu; v opačném případě . false

Návraty

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

Výjimky

chars je null (Nothing).

-nebo-

bytes je null (Nothing).

charIndex nebo charCountbyteIndex je menší než nula.

-nebo-

charIndex a charCount neoznamují platnou oblast v charssouboru .

-nebo-

byteIndex není platný index v nástroji bytes.

bytes nemá dostatečnou kapacitu od byteIndex konce pole pro uložení výsledných bajtů.

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 EncoderExceptionFallbackhodnotu .

Příklady

Následující příklad ukazuje, jak kódovat rozsah prvků z pole znaků a uložit kódované bajty v rozsahu prvků v bajtové pole. Metoda GetByteCount se používá k určení velikosti pole požadovaného parametrem 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