다음을 통해 공유


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합니다.

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

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

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

Source:
Encoder.cs
Source:
Encoder.cs
Source:
Encoder.cs

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

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입니다.

반환

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

적용 대상

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

Source:
Encoder.cs
Source:
Encoder.cs
Source:
Encoder.cs

중요

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

매개 변수

chars
Char*

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

charCount
Int32

인코딩할 문자 수입니다.

bytes
Byte*

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

byteCount
Int32

쓸 최대 바이트 수입니다.

flush
Boolean

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

반환

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

특성

예외

charsnull(Nothing)입니다.

또는

bytesnull(Nothing)입니다.

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

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

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

FallbackEncoderExceptionFallback로 설정됩니다.

적용 대상

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

Source:
Encoder.cs
Source:
Encoder.cs
Source:
Encoder.cs

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

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입니다.

반환

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

적용 대상