Encoder.GetBytes Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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í.
- flush
- Boolean
true
pro vymazání interního stavu 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í 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
Skutečný počet bajtů zapsaných v umístění uvedeném bytes
parametrem.
- Atributy
Výjimky
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
Skutečný počet bajtů zapsaných do bytes
.
Výjimky
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]
'