次の方法で共有


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 byteIndexbyteCount 、または charIndex が 0 未満です。

または

byteIndexbyteCount を加算した値が、 bytes の長さを超えています。

または

charIndexchars の長さを超えています。

解説

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