Encoder.GetBytes Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Wenn eine abgeleitete Klasse überschrieben wird, codiert eine Reihe von Zeichen in eine Bytesequenz.
Überlädt
| Name | Beschreibung |
|---|---|
| GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, codiert eine Reihe von Zeichen in der Eingabezeichenspanne und alle Zeichen im internen Puffer in eine Folge von Bytes, die in der Eingabebyte-Spanne gespeichert sind. Ein Parameter gibt an, ob der interne Zustand des Encoders nach der Konvertierung gelöscht werden soll. |
| GetBytes(Char*, Int32, Byte*, Int32, Boolean) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, codiert eine Reihe von Zeichen, die mit dem angegebenen Zeichenzeiger beginnen, und alle Zeichen im internen Puffer in eine Abfolge von Bytes, die ab dem angegebenen Bytezeiger gespeichert werden. Ein Parameter gibt an, ob der interne Zustand des Encoders nach der Konvertierung gelöscht werden soll. |
| GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean) |
Wenn eine abgeleitete Klasse überschrieben wird, codiert eine Reihe von Zeichen aus dem angegebenen Zeichenarray und alle Zeichen im internen Puffer in das angegebene Bytearray. Ein Parameter gibt an, ob der interne Zustand des Encoders nach der Konvertierung gelöscht werden soll. |
Hinweise
Denken Sie daran, dass das Encoder Objekt den Zustand zwischen Aufrufen GetBytesvon . Wenn die Anwendung mit einem Datenstrom fertig ist, sollte der flush Parameter true im letzten Aufruf GetBytes so festgelegt werden, dass die Statusinformationen geleert werden und dass die codierten Bytes ordnungsgemäß beendet werden. Mit dieser Einstellung ignoriert der Encoder ungültige Bytes am Ende des Datenblocks, z. B. nicht übereinstimmende Surrogate oder unvollständige kombinationslose Sequenzen und löscht den internen Puffer.
Um die genaue Puffergröße zu berechnen, GetBytes die zum Speichern der resultierenden Zeichen erforderlich ist, sollte die Anwendung verwenden GetByteCount.
Wenn GetBytes der Encoder mit flush "Set" falseaufgerufen wird, speichert der Encoder nachgestellte Bytes am Ende des Datenblocks in einem internen Puffer und verwendet sie im nächsten Codierungsvorgang. Die Anwendung sollte unmittelbar vor dem Aufrufen GetBytes desselben Blocks einen Datenblock aufrufenGetByteCount, sodass alle nachfolgenden Zeichen aus dem vorherigen Block in die Berechnung einbezogen werden.
Wenn Ihre Anwendung viele Segmente eines Eingabedatenstroms konvertieren soll, sollten Sie die Convert Methode verwenden. GetBytes löst eine Ausnahme aus, wenn der Ausgabepuffer nicht groß genug ist, aber Convert so viel Platz wie möglich füllt und die zeichenlese- und byte geschriebenen Zeichen zurückgibt. Weitere Kommentare finden Sie auch im Encoding.GetBytes Thema.
GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean)
Wenn sie in einer abgeleiteten Klasse überschrieben werden, codiert eine Reihe von Zeichen in der Eingabezeichenspanne und alle Zeichen im internen Puffer in eine Folge von Bytes, die in der Eingabebyte-Spanne gespeichert sind. Ein Parameter gibt an, ob der interne Zustand des Encoders nach der Konvertierung gelöscht werden soll.
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
Parameter
- chars
- ReadOnlySpan<Char>
Ein Zeichenbereich, der codiert werden soll.
- flush
- Boolean
trueum den internen Zustand des Encoders nach der Konvertierung zu löschen; andernfalls . false
Gibt zurück
Die tatsächliche Anzahl von Bytes, die an der position geschrieben wurden, die durch den bytes Parameter angegeben wurde.
Gilt für:
GetBytes(Char*, Int32, Byte*, Int32, Boolean)
Wichtig
Diese API ist nicht CLS-kompatibel.
Wenn sie in einer abgeleiteten Klasse überschrieben werden, codiert eine Reihe von Zeichen, die mit dem angegebenen Zeichenzeiger beginnen, und alle Zeichen im internen Puffer in eine Abfolge von Bytes, die ab dem angegebenen Bytezeiger gespeichert werden. Ein Parameter gibt an, ob der interne Zustand des Encoders nach der Konvertierung gelöscht werden soll.
public:
virtual int GetBytes(char* chars, int charCount, System::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)]
public virtual int GetBytes(char* chars, int charCount, byte* bytes, int byteCount, bool flush);
[<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
[<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
Parameter
- chars
- Char*
Ein Zeiger auf das erste zeichen, das codiert werden soll.
- charCount
- Int32
Die Anzahl der zu codierenden Zeichen.
- bytes
- Byte*
Ein Zeiger auf die Position, an der die resultierende Folge von Bytes geschrieben werden soll.
- byteCount
- Int32
Die maximale Anzahl von Bytes, die geschrieben werden sollen.
- flush
- Boolean
trueum den internen Zustand des Encoders nach der Konvertierung zu löschen; andernfalls . false
Gibt zurück
Die tatsächliche Anzahl von Bytes, die an der position geschrieben wurden, die durch den bytes Parameter angegeben wurde.
- Attribute
Ausnahmen
charCount oder byteCount ist kleiner als Null.
byteCount ist kleiner als die resultierende Anzahl von Bytes.
Ein Fallback ist aufgetreten (weitere Informationen finden Sie unter "Zeichencodierung in .NET")
-und-
Fallback ist auf EncoderExceptionFallback festgelegt.
Gilt für:
GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean)
Wenn eine abgeleitete Klasse überschrieben wird, codiert eine Reihe von Zeichen aus dem angegebenen Zeichenarray und alle Zeichen im internen Puffer in das angegebene Bytearray. Ein Parameter gibt an, ob der interne Zustand des Encoders nach der Konvertierung gelöscht werden soll.
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
Parameter
- chars
- Char[]
Das Zeichenarray, das die zu codierenden Zeichensätze enthält.
- charIndex
- Int32
Der Index des ersten zu codierenden Zeichens.
- charCount
- Int32
Die Anzahl der zu codierenden Zeichen.
- bytes
- Byte[]
Das Bytearray, das die resultierende Folge von Bytes enthält.
- byteIndex
- Int32
Der Index, bei dem mit dem Schreiben der resultierenden Bytesequenz begonnen werden soll.
- flush
- Boolean
trueum den internen Zustand des Encoders nach der Konvertierung zu löschen; andernfalls . false
Gibt zurück
Die tatsächliche Anzahl der in bytes.
Ausnahmen
charIndex oder charCountbyteIndex ist kleiner als Null.
-oder-
charIndex und charCount keinen gültigen Bereich in chars.
-oder-
byteIndex ist kein gültiger Index in bytes.
bytes verfügt nicht über genügend Kapazität vom byteIndex Ende des Arrays, um die resultierenden Bytes aufzunehmen.
Ein Fallback ist aufgetreten (weitere Informationen finden Sie unter "Zeichencodierung in .NET")
-und-
Fallback ist auf EncoderExceptionFallback festgelegt.
Beispiele
Im folgenden Beispiel wird veranschaulicht, wie ein Elementbereich aus einem Zeichenarray codiert und die codierten Bytes in einem Bereich von Elementen in einem Bytearray gespeichert werden. Die GetByteCount Methode wird verwendet, um die Größe des arrays zu bestimmen, das erforderlich ist GetBytes.
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]
'