Decoder.GetChars 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在派生类中重写时,将一个字节序列解码为一组字符。
重载
GetChars(ReadOnlySpan<Byte>, Span<Char>, Boolean) |
在派生类中重写时,将范围字节序列和内部缓冲区中的任何字节解码为从指定字符指针开始存储的一组字符。 一个参数,指示转换后是否要清除解码器的内部状态。 |
GetChars(Byte*, Int32, Char*, Int32, Boolean) |
在派生类中重写时,将字节序列(从指定的字节指针处开始)和任何内部缓冲区中的字节解码为从指定字符指针开始存储的一组字符。 一个参数,指示转换后是否要清除解码器的内部状态。 |
GetChars(Byte[], Int32, Int32, Char[], Int32) |
在派生类中重写时,将指定字节数组的字节序列和内部缓冲区中的任何字节解码到指定的字符数组。 |
GetChars(Byte[], Int32, Int32, Char[], Int32, Boolean) |
在派生类中重写时,将指定字节数组的字节序列和内部缓冲区中的任何字节解码到指定的字符数组。 一个参数,指示转换后是否要清除解码器的内部状态。 |
GetChars(ReadOnlySpan<Byte>, Span<Char>, Boolean)
- Source:
- Decoder.cs
- Source:
- Decoder.cs
- Source:
- Decoder.cs
在派生类中重写时,将范围字节序列和内部缓冲区中的任何字节解码为从指定字符指针开始存储的一组字符。 一个参数,指示转换后是否要清除解码器的内部状态。
public:
virtual int GetChars(ReadOnlySpan<System::Byte> bytes, Span<char> chars, bool flush);
public virtual int GetChars (ReadOnlySpan<byte> bytes, Span<char> chars, bool flush);
abstract member GetChars : ReadOnlySpan<byte> * Span<char> * bool -> int
override this.GetChars : ReadOnlySpan<byte> * Span<char> * bool -> int
Public Overridable Function GetChars (bytes As ReadOnlySpan(Of Byte), chars As Span(Of Char), flush As Boolean) As Integer
参数
- bytes
- ReadOnlySpan<Byte>
要解码的字节范围。
- flush
- Boolean
如果要在转换后清除解码器的内部状态,则为 true
;否则,为 false
。
返回
在由 chars
参数指示的范围处写入的实际字符数。
注解
请记住, 对象在 Decoder 调用 GetChars之间保存状态。 当应用程序完成数据流时,它应将 flush
参数 true
设置为 以确保刷新状态信息。 使用此设置时,解码器将忽略数据块末尾的无效字节,并清除内部缓冲区。
若要计算存储生成的字符所需的确切跨度大小 GetChars
,应用程序应使用 GetCharCount。
如果在GetChars
设置为 false
的情况下flush
调用 ,则解码器会将尾随字节存储在内部缓冲区中的数据块末尾,并在下一个解码操作中使用它们。 应用程序应在 GetCharCount
调用同一块数据块之前立即对数据块调用 GetChars
,以便计算中包括上一个块中的任何尾随字节。
如果应用程序要转换输入流的多个段,请考虑使用 Convert 方法。 GetChars 如果输出范围不够大,将引发异常,但 Convert 会填充尽可能多的空间,并返回读取的字节数和写入的字符数,前提是输出数组允许至少两个字符。 有关更多注释, Encoding.GetChars 另请参阅主题。
适用于
GetChars(Byte*, Int32, Char*, Int32, Boolean)
- Source:
- Decoder.cs
- Source:
- Decoder.cs
- Source:
- Decoder.cs
重要
此 API 不符合 CLS。
在派生类中重写时,将字节序列(从指定的字节指针处开始)和任何内部缓冲区中的字节解码为从指定字符指针开始存储的一组字符。 一个参数,指示转换后是否要清除解码器的内部状态。
public:
virtual int GetChars(System::Byte* bytes, int byteCount, char* chars, int charCount, bool flush);
[System.CLSCompliant(false)]
public virtual int GetChars (byte* bytes, int byteCount, char* chars, int charCount, bool flush);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetChars (byte* bytes, int byteCount, char* chars, int charCount, bool flush);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
[System.Security.SecurityCritical]
public virtual int GetChars (byte* bytes, int byteCount, char* chars, int charCount, bool flush);
[<System.CLSCompliant(false)>]
abstract member GetChars : nativeptr<byte> * int * nativeptr<char> * int * bool -> int
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int * bool -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetChars : nativeptr<byte> * int * nativeptr<char> * int * bool -> int
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int * bool -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
[<System.Security.SecurityCritical>]
abstract member GetChars : nativeptr<byte> * int * nativeptr<char> * int * bool -> int
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int * bool -> int
参数
- bytes
- Byte*
指向第一个要解码的字节的指针。
- byteCount
- Int32
要解码的字节数。
- chars
- Char*
一个指针,指向开始写入所产生的字符集的位置。
- charCount
- Int32
要写入的最大字符数。
- flush
- Boolean
如果要在转换后清除解码器的内部状态,则为 true
;否则,为 false
。
返回
在由 chars
参数指示的位置处写入的实际字符数。
- 属性
例外
byteCount
或 charCount
小于零。
charCount
少于所产生的字符数。
注解
请记住, 对象在 Decoder 调用 GetChars之间保存状态。 当应用程序完成数据流时,它应将 flush
参数 true
设置为 以确保刷新状态信息。 使用此设置时,解码器将忽略数据块末尾的无效字节,并清除内部缓冲区。
若要计算存储生成的字符所需的确切缓冲区大小 GetChars
,应用程序应使用 GetCharCount。
如果在GetChars
设置为 false
的情况下flush
调用 ,则解码器会将尾随字节存储在内部缓冲区中的数据块末尾,并在下一个解码操作中使用它们。 应用程序应在 GetCharCount
调用同一块数据块之前立即对数据块调用 GetChars
,以便计算中包括上一个块中的任何尾随字节。
如果应用程序要转换输入流的多个段,请考虑使用 Convert 方法。 GetChars 如果输出缓冲区不够大,将引发异常,但 Convert 会填充尽可能多的空间,并返回读取的字节数和写入的字符数,前提是输出数组允许至少两个字符。 有关更多注释, Encoding.GetChars 另请参阅主题。
另请参阅
适用于
GetChars(Byte[], Int32, Int32, Char[], Int32)
- Source:
- Decoder.cs
- Source:
- Decoder.cs
- Source:
- Decoder.cs
在派生类中重写时,将指定字节数组的字节序列和内部缓冲区中的任何字节解码到指定的字符数组。
public:
abstract int GetChars(cli::array <System::Byte> ^ bytes, int byteIndex, int byteCount, cli::array <char> ^ chars, int charIndex);
public abstract int GetChars (byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex);
abstract member GetChars : byte[] * int * int * char[] * int -> int
Public MustOverride 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
的实际字符数。
例外
byteIndex
、byteCount
或 charIndex
小于零。
或
byteindex
和 byteCount
不表示 bytes
中的有效范围。
或
charIndex
不是 chars
中的有效索引。
chars
中从 charIndex
到数组结尾没有足够容量来容纳所产生的字符。
示例
以下示例演示如何解码字节数组中的元素范围,并将其存储在 Unicode 字符数组中。 方法 GetCharCount 用于计算将解码的元素存储在数组 bytes
中所需的字符数。 方法 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};
Decoder^ uniDecoder = Encoding::Unicode->GetDecoder();
int charCount = uniDecoder->GetCharCount( bytes, 0, bytes->Length );
chars = gcnew array<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: " );
IEnumerator^ myEnum = chars->GetEnumerator();
while ( myEnum->MoveNext() )
{
Char c = safe_cast<Char>(myEnum->Current);
Console::Write( "[{0}]", c.ToString() );
}
Console::WriteLine();
}
/* This code example produces the following output.
7 characters used to decode bytes.
Decoded chars: [U][n][i][c][o][d][e]
*/
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();
}
}
/* This code example produces the following output.
7 characters used to decode bytes.
Decoded chars: [U][n][i][c][o][d][e]
*/
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
'This code example produces the following output.
'
'7 characters used to decode bytes.
'Decoded chars: [U][n][i][c][o][d][e]
'
注解
请记住, 对象在 Decoder 调用 GetChars之间保存状态。 当应用程序完成数据流时,它应将 flush
参数 true
设置为 以确保刷新状态信息。 使用此设置时,解码器将忽略数据块末尾的无效字节,并清除内部缓冲区。
若要计算存储生成的字符所需的确切数组大小 GetChars
,应用程序应使用 GetCharCount。
如果在GetChars
设置为 false
的情况下flush
调用 ,则解码器会将尾随字节存储在内部缓冲区中的数据块末尾,并在下一个解码操作中使用它们。 应用程序应在 GetCharCount
调用同一块数据块之前立即对数据块调用 GetChars
,以便计算中包括上一个块中的任何尾随字节。
如果应用程序要转换输入流的多个段,请考虑使用 Convert 方法。 GetChars 如果输出缓冲区不够大,将引发异常,但 Convert 会填充尽可能多的空间,并返回读取的字节数和写入的字符数,前提是输出数组允许至少两个字符。 有关更多注释, Encoding.GetChars 另请参阅主题。
另请参阅
适用于
GetChars(Byte[], Int32, Int32, Char[], Int32, Boolean)
- Source:
- Decoder.cs
- Source:
- Decoder.cs
- Source:
- Decoder.cs
在派生类中重写时,将指定字节数组的字节序列和内部缓冲区中的任何字节解码到指定的字符数组。 一个参数,指示转换后是否要清除解码器的内部状态。
public:
virtual int GetChars(cli::array <System::Byte> ^ bytes, int byteIndex, int byteCount, cli::array <char> ^ chars, int charIndex, bool flush);
public virtual int GetChars (byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex, bool flush);
abstract member GetChars : byte[] * int * int * char[] * int * bool -> int
override this.GetChars : byte[] * int * int * char[] * int * bool -> int
Public Overridable Function GetChars (bytes As Byte(), byteIndex As Integer, byteCount As Integer, chars As Char(), charIndex As Integer, flush As Boolean) As Integer
参数
- bytes
- Byte[]
包含要解码的字节序列的字节数组。
- byteIndex
- Int32
第一个要解码的字节的索引。
- byteCount
- Int32
要解码的字节数。
- chars
- Char[]
要用于包含所产生的字符集的字符数组。
- charIndex
- Int32
开始写入所产生的字符集的索引位置。
- flush
- Boolean
如果要在转换后清除解码器的内部状态,则为 true
;否则,为 false
。
返回
写入 chars
参数的实际字符数。
例外
byteIndex
、byteCount
或 charIndex
小于零。
或
byteindex
和 byteCount
不表示 bytes
中的有效范围。
或
charIndex
不是 chars
中的有效索引。
chars
中从 charIndex
到数组结尾没有足够容量来容纳所产生的字符。
注解
请记住, 对象在 Decoder 调用 GetChars之间保存状态。 当应用程序完成数据流时,它应将 flush
参数 true
设置为 以确保刷新状态信息。 使用此设置时,解码器将忽略数据块末尾的无效字节,并清除内部缓冲区。
若要计算存储生成的字符所需的确切数组大小 GetChars
,应用程序应使用 GetCharCount。
如果在GetChars
设置为 false
的情况下flush
调用 ,则解码器会将尾随字节存储在内部缓冲区中的数据块末尾,并在下一个解码操作中使用它们。 应用程序应在 GetCharCount
调用同一块数据块之前立即对数据块调用 GetChars
,以便计算中包括上一个块中的任何尾随字节。
如果应用程序要转换输入流的多个段,请考虑使用 Convert 方法。 GetChars 如果输出缓冲区不够大,将引发异常,但 Convert 会填充尽可能多的空间,并返回读取的字节数和写入的字符数,前提是输出数组允许至少两个字符。 有关更多注释, Encoding.GetChars 另请参阅主题。