Bagikan melalui


Encoder.GetBytes Metode

Definisi

Ketika ditimpa di kelas turunan, mengodekan sekumpulan karakter ke dalam urutan byte.

Overload

GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean)

Ketika ditimpa di kelas turunan, mengodekan sekumpulan karakter dalam rentang karakter input dan karakter apa pun di buffer internal ke dalam urutan byte yang disimpan dalam rentang byte input. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi.

GetBytes(Char*, Int32, Byte*, Int32, Boolean)

Saat ditimpa dalam kelas turunan, mengodekan sekumpulan karakter yang dimulai pada penunjuk karakter yang ditentukan dan karakter apa pun di buffer internal ke dalam urutan byte yang disimpan mulai dari penunjuk byte yang ditentukan. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi.

GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean)

Saat ditimpa di kelas turunan, mengodekan sekumpulan karakter dari array karakter yang ditentukan dan karakter apa pun dalam buffer internal ke dalam array byte yang ditentukan. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi.

Keterangan

Ingatlah bahwa Encoder objek menyimpan status antara panggilan ke GetBytes. Ketika aplikasi selesai dengan aliran data, aplikasi harus mengatur flush parameter ke true dalam panggilan terakhir ke GetBytes untuk memastikan bahwa informasi status dihapus dan bahwa byte yang dikodekan dihentikan dengan benar. Dengan pengaturan ini, encoder mengabaikan byte yang tidak valid di akhir blok data, seperti pengganti yang tidak cocok atau urutan penggabungan yang tidak lengkap, dan menghapus buffer internal.

Untuk menghitung ukuran buffer yang tepat yang GetBytes mengharuskan untuk menyimpan karakter yang dihasilkan, aplikasi harus menggunakan GetByteCount.

Jika GetBytes dipanggil dengan flush diatur ke false, encoder menyimpan byte berikutnya di akhir blok data dalam buffer internal dan menggunakannya dalam operasi pengodean berikutnya. Aplikasi harus memanggil GetByteCount blok data segera sebelum memanggil GetBytes pada blok yang sama, sehingga setiap karakter berikutnya dari blok sebelumnya disertakan dalam perhitungan.

Jika aplikasi Anda mengonversi banyak segmen aliran input, pertimbangkan untuk menggunakan metode .Convert GetBytes akan melemparkan pengecualian jika buffer output tidak cukup besar, tetapi Convert akan mengisi ruang sebanyak mungkin dan mengembalikan karakter yang dibaca dan byte yang ditulis. Encoding.GetBytes Lihat juga topik untuk komentar lainnya.

GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean)

Sumber:
Encoder.cs
Sumber:
Encoder.cs
Sumber:
Encoder.cs

Ketika ditimpa di kelas turunan, mengodekan sekumpulan karakter dalam rentang karakter input dan karakter apa pun di buffer internal ke dalam urutan byte yang disimpan dalam rentang byte input. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi.

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>

Rentang karakter untuk dikodekan.

bytes
Span<Byte>

Rentang byte untuk menulis urutan byte yang dihasilkan.

flush
Boolean

true untuk menghapus status internal encoder setelah konversi; jika tidak, false.

Mengembalikan

Jumlah byte aktual yang ditulis di lokasi yang ditunjukkan oleh bytes parameter .

Berlaku untuk

GetBytes(Char*, Int32, Byte*, Int32, Boolean)

Sumber:
Encoder.cs
Sumber:
Encoder.cs
Sumber:
Encoder.cs

Penting

API ini bukan kompatibel CLS.

Saat ditimpa dalam kelas turunan, mengodekan sekumpulan karakter yang dimulai pada penunjuk karakter yang ditentukan dan karakter apa pun di buffer internal ke dalam urutan byte yang disimpan mulai dari penunjuk byte yang ditentukan. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi.

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

Parameter

chars
Char*

Penunjuk ke karakter pertama yang akan dikodekan.

charCount
Int32

Jumlah karakter yang akan dikodekan.

bytes
Byte*

Penunjuk ke lokasi untuk mulai menulis urutan byte yang dihasilkan.

byteCount
Int32

Jumlah maksimum byte yang akan ditulis.

flush
Boolean

true untuk menghapus status internal encoder setelah konversi; jika tidak, false.

Mengembalikan

Jumlah byte aktual yang ditulis di lokasi yang ditunjukkan oleh bytes parameter .

Atribut

Pengecualian

chars adalah null (Nothing).

-atau-

bytes adalah null (Nothing).

charCount atau byteCount kurang dari nol.

byteCount kurang dari jumlah byte yang dihasilkan.

Fallback terjadi (untuk informasi selengkapnya, lihat Pengodean Karakter di .NET)

-dan-

Fallback diatur ke EncoderExceptionFallback.

Berlaku untuk

GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean)

Sumber:
Encoder.cs
Sumber:
Encoder.cs
Sumber:
Encoder.cs

Saat ditimpa di kelas turunan, mengodekan sekumpulan karakter dari array karakter yang ditentukan dan karakter apa pun dalam buffer internal ke dalam array byte yang ditentukan. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi.

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

Array karakter yang berisi sekumpulan karakter untuk dikodekan.

charIndex
Int32

Indeks karakter pertama yang dikodekan.

charCount
Int32

Jumlah karakter yang akan dikodekan.

bytes
Byte[]

Array byte untuk berisi urutan byte yang dihasilkan.

byteIndex
Int32

Indeks untuk mulai menulis urutan byte yang dihasilkan.

flush
Boolean

true untuk menghapus status internal encoder setelah konversi; jika tidak, false.

Mengembalikan

Jumlah byte aktual yang ditulis ke dalam bytes.

Pengecualian

chars adalah null (Nothing).

-atau-

bytes adalah null (Nothing).

charIndex atau charCount atau byteIndex kurang dari nol.

-atau-

charIndex dan charCount tidak menunjukkan rentang yang valid dalam chars.

-atau-

byteIndex bukan indeks yang valid di bytes.

bytes tidak memiliki kapasitas yang cukup dari byteIndex hingga akhir array untuk mengakomodasi byte yang dihasilkan.

Fallback terjadi (untuk informasi selengkapnya, lihat Pengodean Karakter di .NET)

-dan-

Fallback diatur ke EncoderExceptionFallback.

Contoh

Contoh berikut menunjukkan cara mengodekan berbagai elemen dari array karakter dan menyimpan byte yang dikodekan dalam berbagai elemen dalam array byte. Metode GetByteCount ini digunakan untuk menentukan ukuran array yang diperlukan oleh 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]
'

Berlaku untuk