Encoder.GetBytes Metod

Definition

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.

bytes
Span<Byte>

Ett byteintervall att skriva den resulterande sekvensen med byte till.

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

chars är null (Nothing).

-eller-

bytes är null (Nothing).

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

chars är null (Nothing).

-eller-

bytes är null (Nothing).

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]
'

Gäller för