Encoder.GetBytes 메서드

정의

파생 클래스에서 재정의되면 문자 집합을 바이트 시퀀스로 인코딩합니다.

오버로드

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

파생 클래스에서 재정의할 경우, 입력 문자 범위의 문자 집합과 내부 버퍼의 모든 문자를 입력 바이트 범위에 저장되는 바이트 시퀀스로 인코딩합니다. 매개 변수는 변환 후 인코더의 내부 상태를 지울지 여부를 나타냅니다.

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

파생 클래스에서 재정의될 때 지정한 문자 포인터에서 시작하는 문자 집합 및 내부 버퍼의 모든 문자를 지정한 바이트 포인터에서 시작하여 저장되는 바이트 시퀀스로 인코딩합니다. 매개 변수는 변환 후 인코더의 내부 상태를 지울지 여부를 나타냅니다.

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

파생 클래스에서 재정의될 때 지정한 문자 배열의 문자 집합 및 내부 버퍼의 모든 문자를 지정한 바이트 배열로 인코딩합니다. 매개 변수는 변환 후 인코더의 내부 상태를 지울지 여부를 나타냅니다.

설명

Encoder개체는 호출 사이에 상태를 저장합니다. GetBytes 애플리케이션 데이터의 스트림을 사용 하 여 작업이 완료 되는 경우 설정 해야 합니다 flush 매개 변수를 true 마지막 호출에서 GetBytes 상태 정보를 플러시 되도록 하 고 인코딩된 바이트를 올바르게 종료 되었는지 확인 합니다. 이 설정을 사용하는 경우 인코더가 데이터 블록 끝에 있는 잘못된 바이트(예: 일치하지 않는 서로게이트 또는 불완전한 결합 시퀀스)를 무시하고 내부 버퍼를 지웁니다.

정확한 버퍼 크기를 계산 하려면 GetBytes 필요한 결과 문자를 저장 하려면 애플리케이션을 사용할지 GetByteCount합니다.

로 설정된 를 사용하여 를 GetBytes 호출하면 flush false 인코더가 데이터 블록의 끝에 후행 바이트를 내부 버퍼에 저장하고 다음 인코딩 작업에서 사용합니다. 애플리케이션을 호출 해야 GetByteCount 는 데이터 블록을 호출 하기 바로 직전에 GetBytes 계산에는 이전 블록에서 모든 후행 문자를 동일한 블록에 포함 합니다.

애플리케이션이 입력 스트림의 여러 세그먼트를 변환할 경우 사용을 고려 합니다 Convert 메서드. GetBytes 는 출력 버퍼가 충분히 크지 않은 경우 예외를 throw하지만 Convert 가능한 많은 공간을 채우고 읽은 문자와 쓴 바이트를 반환합니다. 또한 Encoding.GetBytes 자세한 설명은 항목을 참조하세요.

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

파생 클래스에서 재정의할 경우, 입력 문자 범위의 문자 집합과 내부 버퍼의 모든 문자를 입력 바이트 범위에 저장되는 바이트 시퀀스로 인코딩합니다. 매개 변수는 변환 후 인코더의 내부 상태를 지울지 여부를 나타냅니다.

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

매개 변수

chars
ReadOnlySpan<Char>

인코딩할 문자 범위입니다.

bytes
Span<Byte>

결과로 나온 바이트 시퀀스를 쓸 바이트 범위입니다.

flush
Boolean

변환 후 인코더의 내부 상태를 지우려면 true이고, 그렇지 않으면 false입니다.

반환

Int32

bytes 매개 변수가 가리키는 위치에 쓴 실제 바이트 수입니다.

적용 대상

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

중요

이 API는 CLS 규격이 아닙니다.

파생 클래스에서 재정의될 때 지정한 문자 포인터에서 시작하는 문자 집합 및 내부 버퍼의 모든 문자를 지정한 바이트 포인터에서 시작하여 저장되는 바이트 시퀀스로 인코딩합니다. 매개 변수는 변환 후 인코더의 내부 상태를 지울지 여부를 나타냅니다.

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);
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
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

매개 변수

chars
Char*

인코딩할 첫 번째 문자를 가리키는 포인터입니다.

charCount
Int32

인코딩할 문자 수입니다.

bytes
Byte*

결과 바이트 시퀀스를 쓰기 시작할 위치를 가리키는 포인터입니다.

byteCount
Int32

쓸 최대 바이트 수입니다.

flush
Boolean

변환 후 인코더의 내부 상태를 지우려면 true이고, 그렇지 않으면 false입니다.

반환

Int32

bytes 매개 변수가 가리키는 위치에 쓴 실제 바이트 수입니다.

특성

예외

charsnull(Nothing)입니다.

또는

bytesnull(Nothing)입니다.

charCount 또는 byteCount가 0보다 작습니다.

byteCount가 결과 바이트 수보다 작은 경우

대체가 발생했습니다(자세한 내용은 .NET의 문자 인코딩 참조).

FallbackEncoderExceptionFallback로 설정됩니다.

적용 대상

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

파생 클래스에서 재정의될 때 지정한 문자 배열의 문자 집합 및 내부 버퍼의 모든 문자를 지정한 바이트 배열로 인코딩합니다. 매개 변수는 변환 후 인코더의 내부 상태를 지울지 여부를 나타냅니다.

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

매개 변수

chars
Char[]

인코딩할 문자 집합이 포함된 문자 배열입니다.

charIndex
Int32

인코딩할 첫 번째 문자의 인덱스입니다.

charCount
Int32

인코딩할 문자 수입니다.

bytes
Byte[]

결과 바이트 시퀀스를 포함할 바이트 배열입니다.

byteIndex
Int32

결과 바이트 시퀀스를 쓰기 시작할 인덱스입니다.

flush
Boolean

변환 후 인코더의 내부 상태를 지우려면 true이고, 그렇지 않으면 false입니다.

반환

Int32

bytes에 쓴 실제 바이트 수입니다.

예외

charsnull(Nothing)입니다.

또는

bytesnull(Nothing)입니다.

charIndex, charCount 또는 byteIndex가 0보다 작은 경우

또는

charIndexcharCountchars에서 올바른 범위를 나타내지 않습니다.

또는

byteIndexbytes의 유효한 인덱스가 아닌 경우

bytes의 용량(byteIndex ~ 배열 끝)이 부족해서 결과 바이트를 수용할 수 없는 경우

대체가 발생했습니다(자세한 내용은 .NET의 문자 인코딩 참조).

FallbackEncoderExceptionFallback로 설정됩니다.

예제

다음 예제에서는 문자 배열의 요소 범위를 인코딩하고 인코딩된 바이트를 바이트 배열의 요소 범위에 저장하는 방법을 보여 있습니다. GetByteCount메서드는 에 필요한 배열의 크기를 결정하는 데 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]
'

적용 대상