Decoder.GetChars メソッド
派生クラスでオーバーライドされた場合は、バイト配列から指定した範囲の要素をデコードし、これを Unicode 文字配列の指定した範囲に格納します。
Public MustOverride Function GetChars( _
ByVal bytes() As Byte, _ ByVal byteIndex As Integer, _ ByVal byteCount As Integer, _ ByVal chars() As Char, _ ByVal charIndex As Integer _) As Integer
[C#]
public abstract int GetChars(byte[] bytes,intbyteIndex,intbyteCount,char[] chars,intcharIndex);
[C++]
public: virtual int GetChars(unsigned charbytes __gc[],intbyteIndex,intbyteCount,__wchar_tchars __gc[],intcharIndex) = 0;
[JScript]
public abstract function GetChars(
bytes : Byte[],byteIndex : int,byteCount : int,chars : Char[],charIndex : int) : int;
パラメータ
- bytes
デコードするバイト配列。 - byteIndex
デコードする bytes 内の最初の要素のインデックス。 - byteCount
デコードする要素の数。 - chars
デコードされた結果が格納される文字配列。 - charIndex
デコードされた結果が格納される chars 内の最初の要素のインデックス。
戻り値
chars にデコードされた文字数。
例外
例外の種類 | 条件 |
---|---|
ArgumentException | chars には、デコードされた文字を格納するために必要な領域がありません。 |
ArgumentNullException | bytes または chars が null 参照 (Visual Basic では Nothing) です。 |
ArgumentOutOfRangeException | byteIndex 、 byteCount 、または charIndex が 0 未満です。
または byteIndex に byteCount を加算した値が、 bytes の長さを超えています。 または charIndex が chars の長さを超えています。 |
解説
GetCharCount は、デコードされたバイトを格納するために GetChars メソッドが要求する配列サイズの計算のために、使用します。
GetChars を呼び出す前に GetCharCount を呼び出すことをお勧めします。これは、 GetChars メソッドがバイトのブロック間の内部ステータス情報を変更する可能性があるためです。
使用例
[Visual Basic, C#, C++] バイト配列からある範囲の要素をデコードし、Unicode 文字配列内に格納する方法を次の例に示します。 GetCharCount メソッドは、配列 bytes
内でデコードされた要素を格納するために必要な文字数を計算するときに使用します。 GetChars メソッドは、 bytes
内の指定した要素をデコードし、その結果を新しい文字配列 chars
に格納します。
Imports System
Imports System.Text
Class UnicodeEncodingExample
Public Shared Sub Main()
Dim chars() As Char
Dim bytes() As Byte = { _
85, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0 _
}
Dim uniDecoder As Decoder = Encoding.Unicode.GetDecoder()
Dim charCount As Integer = uniDecoder.GetCharCount(bytes, 0, bytes.Length)
chars = New Char(charCount - 1) {}
Dim charsDecodedCount As Integer = _
uniDecoder.GetChars(bytes, 0, bytes.Length, chars, 0)
Console.WriteLine( _
"{0} characters used to decode bytes.", _
charsDecodedCount _
)
Console.Write("Decoded chars: ")
Dim c As Char
For Each c In chars
Console.Write("[{0}]", c)
Next c
Console.WriteLine()
End Sub
End Class
[C#]
using System;
using System.Text;
class UnicodeEncodingExample {
public static void Main() {
Char[] chars;
Byte[] bytes = new Byte[] {
85, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0
};
Decoder uniDecoder = Encoding.Unicode.GetDecoder();
int charCount = uniDecoder.GetCharCount(bytes, 0, bytes.Length);
chars = new Char[charCount];
int charsDecodedCount = uniDecoder.GetChars(bytes, 0, bytes.Length, chars, 0);
Console.WriteLine(
"{0} characters used to decode bytes.", charsDecodedCount
);
Console.Write("Decoded chars: ");
foreach (Char c in chars) {
Console.Write("[{0}]", c);
}
Console.WriteLine();
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
Char chars[];
Byte bytes[] =
{
85, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0
};
Decoder * uniDecoder = Encoding::Unicode -> GetDecoder();
int charCount = uniDecoder -> GetCharCount(bytes, 0, bytes -> Length);
chars = new Char[charCount];
int charsDecodedCount = uniDecoder -> GetChars(bytes, 0, bytes -> Length, chars, 0);
Console::WriteLine(S"{0} characters used to decode bytes.", __box(charsDecodedCount));
Console::Write(S"Decoded chars: ");
IEnumerator* myEnum = chars->GetEnumerator();
while (myEnum->MoveNext())
{
Char* c = __try_cast<Char*>(myEnum->Current);
Console::Write(S"[{0}]", c -> ToString());
}
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
参照
Decoder クラス | Decoder メンバ | System.Text 名前空間 | GetCharCount | GetChars