Encoder.GetBytes Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
När den åsidosättas i en härledd klass kodar en uppsättning tecken till en sekvens med byte.
Överlagringar
| Name | Description |
|---|---|
| GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean) |
När den åsidosätts i en härledd klass kodas en uppsättning tecken i indatateckenintervallet och eventuella tecken i den interna bufferten till en sekvens med byte som lagras i indatabyteintervallet. En parameter anger om kodarens interna tillstånd ska rensas efter konverteringen. |
| GetBytes(Char*, Int32, Byte*, Int32, Boolean) |
När den åsidosätts i en härledd klass kodar en uppsättning tecken som börjar vid den angivna teckenpekaren och eventuella tecken i den interna bufferten till en sekvens med byte som lagras från och med den angivna bytepekaren. En parameter anger om kodarens interna tillstånd ska rensas efter konverteringen. |
| GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean) |
När den åsidosättas i en härledd klass kodas en uppsättning tecken från den angivna teckenmatrisen och eventuella tecken i den interna bufferten till den angivna bytematrisen. En parameter anger om kodarens interna tillstånd ska rensas efter konverteringen. |
Kommentarer
Kom ihåg att objektet Encoder sparar tillstånd mellan anrop till GetBytes. När programmet är klart med en dataström bör den ange parametern flush till true i det senaste anropet för att se till GetBytes att tillståndsinformationen rensas och att de kodade bytea avslutas korrekt. Med den här inställningen ignorerar kodaren ogiltiga byte i slutet av datablocket, till exempel omatchade surrogater eller ofullständiga kombinationssekvenser, och rensar den interna bufferten.
För att beräkna den exakta buffertstorlek som GetBytes krävs för att lagra de resulterande tecknen bör programmet använda GetByteCount.
Om GetBytes anropas med flush inställd falsepå lagrar kodaren efterföljande byte i slutet av datablocket i en intern buffert och använder dem i nästa kodningsåtgärd. Programmet bör anropa GetByteCount ett datablock omedelbart innan det anropas GetBytes i samma block, så att eventuella avslutande tecken från föregående block inkluderas i beräkningen.
Om ditt program ska konvertera många segment av en indataström bör du överväga att använda Convert metoden. GetBytes genererar ett undantag om utdatabufferten inte är tillräckligt stor, men Convert fyller så mycket utrymme som möjligt och returnerar teckenläsningen och byte som skrivits. Se även avsnittet Encoding.GetBytes för fler kommentarer.
GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean)
När den åsidosätts i en härledd klass kodas en uppsättning tecken i indatateckenintervallet och eventuella tecken i den interna bufferten till en sekvens med byte som lagras i indatabyteintervallet. En parameter anger om kodarens interna tillstånd ska rensas efter konverteringen.
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
Parametrar
- chars
- ReadOnlySpan<Char>
Ett teckenintervall som ska kodas.
- flush
- Boolean
trueför att rensa kodarens interna tillstånd efter konverteringen. annars . false
Returer
Det faktiska antalet byte som skrivits på den plats som anges av parametern bytes .
Gäller för
GetBytes(Char*, Int32, Byte*, Int32, Boolean)
Viktigt!
Detta API uppfyller inte CLS.
När den åsidosätts i en härledd klass kodar en uppsättning tecken som börjar vid den angivna teckenpekaren och eventuella tecken i den interna bufferten till en sekvens med byte som lagras från och med den angivna bytepekaren. En parameter anger om kodarens interna tillstånd ska rensas efter konverteringen.
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
Parametrar
- chars
- Char*
En pekare till det första tecknet som ska kodas.
- charCount
- Int32
Antalet tecken som ska kodas.
- bytes
- Byte*
En pekare till den plats där du ska börja skriva den resulterande sekvensen med byte.
- byteCount
- Int32
Det maximala antalet byte som ska skrivas.
- flush
- Boolean
trueför att rensa kodarens interna tillstånd efter konverteringen. annars . false
Returer
Det faktiska antalet byte som skrivits på den plats som anges av parametern bytes .
- Attribut
Undantag
charCount eller byteCount är mindre än noll.
byteCount är mindre än det resulterande antalet byte.
En reserv inträffade (mer information finns i Character Encoding i .NET)
-och-
Fallback är inställt på EncoderExceptionFallback.
Gäller för
GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean)
När den åsidosättas i en härledd klass kodas en uppsättning tecken från den angivna teckenmatrisen och eventuella tecken i den interna bufferten till den angivna bytematrisen. En parameter anger om kodarens interna tillstånd ska rensas efter konverteringen.
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
Parametrar
- chars
- Char[]
Teckenmatrisen som innehåller den uppsättning tecken som ska kodas.
- charIndex
- Int32
Indexet för det första tecknet som ska kodas.
- charCount
- Int32
Antalet tecken som ska kodas.
- bytes
- Byte[]
Bytematrisen som ska innehålla den resulterande sekvensen av byte.
- byteIndex
- Int32
Indexet där du ska börja skriva den resulterande sekvensen med byte.
- flush
- Boolean
trueför att rensa kodarens interna tillstånd efter konverteringen. annars . false
Returer
Det faktiska antalet byte som skrivits till bytes.
Undantag
charIndex eller charCountbyteIndex är mindre än noll.
-eller-
charIndex och charCount ange inte ett giltigt intervall i chars.
-eller-
byteIndex är inte ett giltigt index i bytes.
bytes har inte tillräckligt med kapacitet från byteIndex till slutet av matrisen för att rymma de resulterande byteen.
En reserv inträffade (mer information finns i Character Encoding i .NET)
-och-
Fallback är inställt på EncoderExceptionFallback.
Exempel
I följande exempel visas hur du kodar ett område med element från en teckenmatris och lagrar kodade byte i ett intervall med element i en bytematris. Metoden GetByteCount används för att fastställa storleken på matrisen som krävs av 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]
'