UTF7Encoding.GetChars 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將位元組序列解碼成一組字元。
多載
GetChars(Byte*, Int32, Char*, Int32) |
將起始於指定位元組指標的位元組序列解碼成一組字元;儲存該組字元時,係以指定的字元指標為起始點。 |
GetChars(Byte[], Int32, Int32, Char[], Int32) |
將指定位元組陣列中的位元組序列解碼成指定的字元陣列。 |
GetChars(Byte*, Int32, Char*, Int32)
重要
此 API 不符合 CLS 規範。
將起始於指定位元組指標的位元組序列解碼成一組字元;儲存該組字元時,係以指定的字元指標為起始點。
public:
override int GetChars(System::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)]
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)>]
[<System.Security.SecurityCritical>]
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
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
所表示的位置上寫入的實際字元數。
- 屬性
例外狀況
byteCount
或 charCount
小於零。
charCount
小於結果字元數。
發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)
-和-
備註
若要計算儲存所產生字元所需的 GetChars 確切數位大小,請使用 GetCharCount。 若要計算數位大小上限,應用程式應該使用 GetMaxCharCount。 方法 GetCharCount 通常允許配置較少的記憶體,而 GetMaxCharCount 方法通常會執行得更快。
要轉換的數據,例如從數據流讀取的數據,可能只能在循序區塊中使用。 在此情況下,或者,如果數據量太大,因此需要分成較小的區塊,應用程式應該分別使用 Decoder 方法Encoder或 方法所提供的 GetDecoder 。GetEncoder
注意
UTF7Encoding 不提供錯誤偵測。 遇到無效的位元組時, UTF7Encoding 通常會發出無效的位元組。 如果位元組大於十六進位0x7F,位元組值會以零延伸至 Unicode 字元,結果會儲存在陣列中 chars
,並終止任何移位序列。 例如,如果要編碼的位元組是十六進位0x81,則產生的字元為U+0081。 基於安全性考慮,建議您使用 UTF8Encoding、 UnicodeEncoding或 UTF32Encoding ,並啟用錯誤偵測。
另請參閱
- GetCharCount(Byte[], Int32, Int32)
- GetMaxCharCount(Int32)
- GetDecoder()
- GetString(Byte[], Int32, Int32)
適用於
GetChars(Byte[], Int32, Int32, Char[], Int32)
將指定位元組陣列中的位元組序列解碼成指定的字元陣列。
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
的實際字元數。
例外狀況
byteIndex
、byteCount
或 charIndex
小於零。
-或-
byteindex
與 byteCount
不代表 bytes
中有效的範圍。
-或-
charIndex
在 chars
中不是有效的索引。
從 chars
到陣列結尾處,charIndex
沒有足夠的容量容納結果字元。
發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)
-和-
範例
下列程式代碼範例示範如何使用 GetChars 方法來譯碼位元組陣列中的元素範圍,並將結果儲存在字元陣列中。
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
array<Char>^chars;
array<Byte>^bytes = {85,84,70,55,32,69,110,99,111,100,105,110,103,32,69,120,97,109,112,108,101};
UTF7Encoding^ utf7 = gcnew UTF7Encoding;
int charCount = utf7->GetCharCount( bytes, 2, 8 );
chars = gcnew array<Char>(charCount);
int charsDecodedCount = utf7->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 UTF7EncodingExample {
public static void Main() {
Char[] chars;
Byte[] bytes = new Byte[] {
85, 84, 70, 55, 32, 69, 110,
99, 111, 100, 105, 110, 103, 32,
69, 120, 97, 109, 112, 108, 101
};
UTF7Encoding utf7 = new UTF7Encoding();
int charCount = utf7.GetCharCount(bytes, 2, 8);
chars = new Char[charCount];
int charsDecodedCount = utf7.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 UTF7EncodingExample
Public Shared Sub Main()
Dim chars() As Char
Dim bytes() As Byte = { _
85, 84, 70, 55, 32, 69, 110, _
99, 111, 100, 105, 110, 103, 32, _
69, 120, 97, 109, 112, 108, 101 _
}
Dim utf7 As New UTF7Encoding()
Dim charCount As Integer = utf7.GetCharCount(bytes, 2, 8)
chars = New Char(charCount - 1) {}
Dim charsDecodedCount As Integer = utf7.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 方法通常會執行得更快。
要轉換的數據,例如從數據流讀取的數據,可能只能在循序區塊中使用。 在此情況下,或者,如果數據量太大,因此需要分成較小的區塊,應用程式應該分別使用 Decoder 方法Encoder或 方法所提供的 GetDecoder 。GetEncoder
注意
UTF7Encoding 不提供錯誤偵測。 遇到無效的位元組時, UTF7Encoding 通常會發出無效的位元組。 如果位元組大於十六進位0x7F,位元組值會以零延伸至 Unicode 字元,結果會儲存在陣列中 chars
,並終止任何移位序列。 例如,如果要編碼的位元組是十六進位0x81,則產生的字元為U+0081。 基於安全性考慮,建議您使用 UTF8Encoding、 UnicodeEncoding或 UTF32Encoding ,並啟用錯誤偵測。
另請參閱
- GetCharCount(Byte[], Int32, Int32)
- GetMaxCharCount(Int32)
- GetDecoder()
- GetString(Byte[], Int32, Int32)