Encoder.GetBytes 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
파생 클래스에서 재정의되면 문자 집합을 바이트 시퀀스로 인코딩합니다.
오버로드
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>
인코딩할 문자 범위입니다.
- flush
- Boolean
변환 후 인코더의 내부 상태를 지우려면 true
이고, 그렇지 않으면 false
입니다.
반환
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
입니다.
반환
bytes
매개 변수가 가리키는 위치에 쓴 실제 바이트 수입니다.
- 특성
예외
charCount
또는 byteCount
가 0보다 작습니다.
byteCount
가 결과 바이트 수보다 작은 경우
적용 대상
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
입니다.
반환
bytes
에 쓴 실제 바이트 수입니다.
예외
charIndex
, charCount
또는 byteIndex
가 0보다 작은 경우
또는
charIndex
및 charCount
가 chars
에서 올바른 범위를 나타내지 않습니다.
또는
byteIndex
가 bytes
의 유효한 인덱스가 아닌 경우
bytes
의 용량(byteIndex
~ 배열 끝)이 부족해서 결과 바이트를 수용할 수 없는 경우
예제
다음 예제에서는 문자 배열의 요소 범위를 인코딩하고 인코딩된 바이트를 바이트 배열의 요소 범위에 저장하는 방법을 보여 있습니다. 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]
'