Encoder.GetBytes メソッド
派生クラスでオーバーライドされた場合は、文字配列内の指定した範囲の文字をエンコードし、これをバイト配列の指定した範囲に格納します。
Public MustOverride Function GetBytes( _
ByVal chars() As Char, _ ByVal charIndex As Integer, _ ByVal charCount As Integer, _ ByVal bytes() As Byte, _ ByVal byteIndex As Integer, _ ByVal flush As Boolean _) As Integer
[C#]
public abstract int GetBytes(char[] chars,intcharIndex,intcharCount,byte[] bytes,intbyteIndex,boolflush);
[C++]
public: virtual int GetBytes(__wchar_tchars __gc[],intcharIndex,intcharCount,unsigned charbytes __gc[],intbyteIndex,boolflush) = 0;
[JScript]
public abstract function GetBytes(
chars : Char[],charIndex : int,charCount : int,bytes : Byte[],byteIndex : int,flush : Boolean) : int;
パラメータ
- chars
エンコードする文字配列。 - charIndex
エンコードする chars 内の最初の文字のインデックス。 - charCount
エンコードする文字数。 - bytes
エンコーディングが格納されているバイト配列。 - byteIndex
エンコーディングが格納されている bytes 内の最初の要素のインデックス。 - flush
このエンコーダが変換の最後で状態をフラッシュできる場合は true 。それ以外の場合は false 。エンコードされたバイトのブロックのシーケンスで正確な終端を確認するために、 GetBytes への最後の呼び出しで、 flush に対して true の値を指定できます。
戻り値
bytes にエンコードされたバイト数。
例外
例外の種類 | 条件 |
---|---|
ArgumentException | bytes には、エンコードされた文字を格納するために必要な領域がありません。 |
ArgumentNullException | chars または bytes が null 参照 (Visual Basic では Nothing) です。 |
ArgumentOutOfRangeException | charIndex 、 charCount 、または byteIndex が 0 未満です。
または charIndex に charCount を加算した値が、 chars の長さを超えています。 または byteIndex が bytes の長さを超えています。 |
解説
エンコードされた文字を格納するために GetBytes メソッドが要求する配列サイズの計算のために、 GetByteCount を使用します。
GetBytes を呼び出す前に GetByteCount を呼び出すことをお勧めします。これは、 GetBytes メソッドがバイトのブロック間の内部ステータス情報を変更する可能性があるためです。
flush パラメータは、下位サロゲートがないストリームの末尾で、上位サロゲートをフラッシュする場合に役立ちます。たとえば、 UTF8Encoding.GetEncoder によって作成された Encoder が、このパラメータを使用して、該当する上位サロゲートを文字ブロックの末尾に書き込むかどうかを判断します。
使用例
[Visual Basic, C#, C++] 文字配列からある範囲の要素をエンコードし、その結果をバイト配列内のある範囲の要素に格納する方法を次の例に示します。 GetByteCount メソッドは、 GetBytes に必要な配列のサイズを確認するときに使用します。
Imports System
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 'Main
End Class 'EncoderExample
[C#]
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();
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
Byte bytes[];
// Unicode characters.
Char chars[] =
{
L'\u03a0', // Pi
L'\u03a3', // Sigma
L'\u03a6',
L'\u03a9'
};
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(S"{0} bytes used to encode characters.", __box(bytesEncodedCount));
Console::Write(S"Encoded bytes: ");
IEnumerator* myEnum = bytes->GetEnumerator();
while (myEnum->MoveNext())
{
Byte b = *__try_cast<Byte __gc*>(myEnum->Current);
Console::Write(S"[{0}]", __box(b));
}
Console::WriteLine();
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard