UnicodeEncoding.GetChars 方法

定义

将一个字节序列解码为一组字符。

重载

GetChars(Byte*, Int32, Char*, Int32)

将从指定的字节指针开始的一个字节序列解码为一组字符,并从指定的字符指针开始存储这组字符。

GetChars(Byte[], Int32, Int32, Char[], Int32)

将指定字节数组中的一个字节序列解码为指定的字符数组。

GetChars(Byte*, Int32, Char*, Int32)

Source:
UnicodeEncoding.cs
Source:
UnicodeEncoding.cs
Source:
UnicodeEncoding.cs

重要

此 API 不符合 CLS。

将从指定的字节指针开始的一个字节序列解码为一组字符,并从指定的字符指针开始存储这组字符。

public:
 override int GetChars(System::Byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
public override int GetChars (byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public override int GetChars (byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public override int GetChars (byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public override int GetChars (byte* bytes, int byteCount, char* chars, int charCount);
[<System.CLSCompliant(false)>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int

参数

bytes
Byte*

指向第一个要解码的字节的指针。

byteCount
Int32

要解码的字节数。

chars
Char*

一个指针,指向开始写入所产生的字符集的位置。

charCount
Int32

要写入的最大字符数。

返回

在由 chars 参数指示的位置处写入的实际字符数。

属性

例外

bytesnull (Nothing)。

charsnull (Nothing)。

byteCountcharCount 小于零。

启用了错误检测,并且 bytes 包含无效的字节序列。

charCount 少于所产生的字符数。

发生回退(有关详细信息,请参阅采用 .NET 的字符编码

-和-

DecoderFallback 设置为 DecoderExceptionFallback

注解

为了计算存储生成的字符所需的确切数组大小 GetChars ,应用程序使用 GetCharCount。 若要计算最大数组大小,应用程序应使用 GetMaxCharCount。 方法 GetCharCount 通常分配较少的内存,而 GetMaxCharCount 该方法的执行速度通常更快。

使用错误检测时,无效序列会导致此方法引发 ArgumentException。 如果不进行错误检测,将忽略无效序列,并且不会引发异常。

如果要解码的字节范围包括 BOM) (字节顺序标记,并且字节数组由非 BOM 感知类型的方法返回,则字符 U+FFFE 包含在此方法返回的字符数组中。 可以通过调用 String.TrimStart 方法将其删除。

要转换的数据(例如从流读取的数据)可能仅在顺序块中可用。 在这种情况下,或者如果数据量太大,需要划分为较小的块,则应用程序应分别使用 DecoderEncoder 方法提供的 GetDecoderGetEncoder 对象。

另请参阅

适用于

GetChars(Byte[], Int32, Int32, Char[], Int32)

Source:
UnicodeEncoding.cs
Source:
UnicodeEncoding.cs
Source:
UnicodeEncoding.cs

将指定字节数组中的一个字节序列解码为指定的字符数组。

public:
 override int GetChars(cli::array <System::Byte> ^ bytes, int byteIndex, int byteCount, cli::array <char> ^ chars, int charIndex);
public override int GetChars (byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex);
override this.GetChars : byte[] * int * int * char[] * int -> int
Public Overrides Function GetChars (bytes As Byte(), byteIndex As Integer, byteCount As Integer, chars As Char(), charIndex As Integer) As Integer

参数

bytes
Byte[]

包含要解码的字节序列的字节数组。

byteIndex
Int32

第一个要解码的字节的索引。

byteCount
Int32

要解码的字节数。

chars
Char[]

要用于包含所产生的字符集的字符数组。

charIndex
Int32

开始写入所产生的字符集的索引位置。

返回

写入 chars 的实际字符数。

例外

bytesnull (Nothing)。

charsnull (Nothing)。

byteIndexbyteCountcharIndex 小于零。

byteindexbyteCount 不表示 bytes中的有效范围。

charIndex 不是 chars 中的有效索引。

启用了错误检测,并且 bytes 包含无效的字节序列。

chars 中从 charIndex 到数组结尾没有足够容量来容纳所产生的字符。

发生回退(有关详细信息,请参阅采用 .NET 的字符编码

-和-

DecoderFallback 设置为 DecoderExceptionFallback

示例

以下示例演示如何使用 GetChars 方法解码字节数组中的元素范围,并将结果存储在字符数组中。

using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   array<Char>^chars;
   array<Byte>^bytes = {85,0,110,0,105,0,99,0,111,0,100,0,101,0};
   UnicodeEncoding^ Unicode = gcnew UnicodeEncoding;
   int charCount = Unicode->GetCharCount( bytes, 2, 8 );
   chars = gcnew array<Char>(charCount);
   int charsDecodedCount = Unicode->GetChars( bytes, 2, 8, chars, 0 );
   Console::WriteLine( "{0} characters used to decode bytes.", charsDecodedCount );
   Console::Write( "Decoded chars: " );
   IEnumerator^ myEnum = chars->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Char c = safe_cast<Char>(myEnum->Current);
      Console::Write( "[{0}]", c.ToString() );
   }

   Console::WriteLine();
}
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
        };

        UnicodeEncoding Unicode = new UnicodeEncoding();

        int charCount = Unicode.GetCharCount(bytes, 2, 8);
        chars = new Char[charCount];
        int charsDecodedCount = Unicode.GetChars(bytes, 2, 8, 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();
    }
}
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 uni As New UnicodeEncoding()
        
        Dim charCount As Integer = uni.GetCharCount(bytes, 2, 8)
        chars = New Char(charCount - 1) {}
        Dim charsDecodedCount As Integer = uni.GetChars(bytes, 2, 8, 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

注解

为了计算存储生成的字符所需的 GetChars 确切数组大小,应用程序使用 GetCharCount。 若要计算最大数组大小,应用程序应使用 GetMaxCharCount。 方法 GetCharCount 通常分配较少的内存,而 GetMaxCharCount 该方法的执行速度通常更快。

使用错误检测时,无效序列会导致此方法引发 ArgumentException。 如果不进行错误检测,将忽略无效序列,并且不会引发异常。

如果要解码的字节范围包括 BOM) (字节顺序标记,并且字节数组由非 BOM 感知类型的方法返回,则字符 U+FFFE 包含在此方法返回的字符数组中。 可以通过调用 String.TrimStart 方法将其删除。

要转换的数据(例如从流读取的数据)可能仅在顺序块中可用。 在这种情况下,或者,如果数据量太大,需要划分为较小的块,则应用程序应分别使用 Decoder 方法或 Encoder 方法提供的 GetDecoderGetEncoder

另请参阅

适用于