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) |
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.
- flush
- Boolean
true
vymazat 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
true
vymazat 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
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
true
vymazat 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
charIndex
nebo charCount
byteIndex
je menší než nula.
-nebo-
charIndex
a charCount
neoznamují platnou oblast v chars
souboru .
-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]
'