ASCIIEncoding.GetBytes 方法

定義

將一組字元編碼成位元組序列。

多載

GetBytes(ReadOnlySpan<Char>, Span<Byte>)

將指定的字元範圍編碼為指定的位元組範圍。

GetBytes(Char*, Int32, Byte*, Int32)

將起始於指定字元指標的一組字元編碼成位元組序列;儲存該位元組序列時,係以指定的位元組指標為起始點。

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

將指定字元陣列中的一組字元編碼成指定的位元組陣列。

GetBytes(String, Int32, Int32, Byte[], Int32)

將指定 String 中的一組字元編碼成指定的位元組陣列。

GetBytes(ReadOnlySpan<Char>, Span<Byte>)

將指定的字元範圍編碼為指定的位元組範圍。

public:
 override int GetBytes(ReadOnlySpan<char> chars, Span<System::Byte> bytes);
public override int GetBytes (ReadOnlySpan<char> chars, Span<byte> bytes);
override this.GetBytes : ReadOnlySpan<char> * Span<byte> -> int
Public Overrides Function GetBytes (chars As ReadOnlySpan(Of Char), bytes As Span(Of Byte)) As Integer

參數

chars
ReadOnlySpan<Char>

要編碼的字元範圍。

bytes
Span<Byte>

包含所產生之位元組集合的範圍。

傳回

Int32

寫入 bytes 的實際位元組數。

備註

若要計算儲存所產生位元組所需的 GetBytes 確切大小,請使用 GetByteCount 。 若要計算大小上限,請使用 GetMaxByteCount 。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常會執行得更快。

要轉換的資料,例如從資料流程讀取的資料,只能在循序區塊中使用。 在此情況下,或者,如果資料量太大,因此需要分割成較小的區塊,請分別使用 Decoder Encoder 方法或 GetEncoder 方法所提供的 GetDecoder

ASCIIEncoding 不提供錯誤偵測。 大於 U+007F 的任何 Unicode 字元會編碼為 ASCII 問號 (「?」) 。

警告

基於安全性考慮,您應該使用 UTF8EncodingUnicodeEncodingUTF32Encoding ,並啟用錯誤偵測。

適用於

GetBytes(Char*, Int32, Byte*, Int32)

重要

此 API 不符合 CLS 規範。

符合 CLS 規範替代方案
System.Text.ASCIIEncoding.GetBytes(Char[], Int32, Int32, Byte[], Int32)

將起始於指定字元指標的一組字元編碼成位元組序列;儲存該位元組序列時,係以指定的位元組指標為起始點。

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

參數

chars
Char*

要編碼的第一個字元指標。

charCount
Int32

要編碼的字元數。

bytes
Byte*

開始寫入結果位元組序列的位置指標。

byteCount
Int32

寫入的最大位元組數。

傳回

Int32

bytes 所表示的位置上寫入的實際位元組數目。

屬性

例外狀況

charsnull

-或- bytesnull

charCountbyteCount 小於零。

byteCount 小於結果位元組數。

發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼) -和- EncoderFallback 設定為 EncoderExceptionFallback

備註

若要計算儲存所產生位元組所需的 GetBytes 確切陣列大小,應用程式會使用 GetByteCount 。 若要計算陣列大小上限,應用程式應該使用 GetMaxByteCount 。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常會執行得更快。

要轉換的資料,例如從資料流程讀取的資料,只能在循序區塊中使用。 在此情況下,或者,如果資料量太大,因此需要分成較小的區塊,應用程式應該分別使用 Decoder 方法 Encoder 或 方法所提供的 GetDecoderGetEncoder

ASCIIEncoding 不提供錯誤偵測。 任何大於 U+007F 的 Unicode 字元會轉譯為 ASCII 問號 (「?」) 。

警告

基於安全性考慮,建議您使用 UTF8EncodingUnicodeEncodingUTF32Encoding ,並啟用錯誤偵測。

另請參閱

適用於

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

將指定字元陣列中的一組字元編碼成指定的位元組陣列。

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

參數

chars
Char[]

包含要解碼之一組字元的字元陣列。

charIndex
Int32

要編碼的第一個字元索引。

charCount
Int32

要編碼的字元數。

bytes
Byte[]

要包含結果位元組序列的位元組陣列。

byteIndex
Int32

要開始寫入結果位元組序列的索引。

傳回

Int32

寫入 bytes 的實際位元組數。

例外狀況

charsnull

-或- bytesnull

charIndexcharCountbyteIndex 小於零。

-或- charIndexcharCount 不代表 chars 中有效的範圍。

-或- byteIndexbytes 中不是有效的索引。

bytes 到陣列結尾處,byteIndex 沒有足夠的容量容納結果位元組。

發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼) -和- EncoderFallback 設定為 EncoderExceptionFallback

範例

下列範例示範如何使用 GetBytes 方法來編碼字串中的字元範圍,並將編碼的字元儲存在位元組陣列中的元素範圍中。

using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   array<Byte>^bytes;
   String^ chars = "ASCII Encoding Example";
   ASCIIEncoding^ ascii = gcnew ASCIIEncoding;
   int byteCount = ascii->GetByteCount( chars->ToCharArray(), 6, 8 );
   bytes = gcnew array<Byte>(byteCount);
   int bytesEncodedCount = ascii->GetBytes( chars, 6, 8, bytes, 0 );
   Console::WriteLine( " {0} bytes used to encode string.", bytesEncodedCount );
   Console::Write( "Encoded bytes: " );
   IEnumerator^ myEnum = bytes->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Byte b = safe_cast<Byte>(myEnum->Current);
      Console::Write( "[{0}]", b );
   }

   Console::WriteLine();
}
using System;
using System.Text;

class ASCIIEncodingExample {
    public static void Main() {
        Byte[] bytes;
        String chars = "ASCII Encoding Example";
        
        ASCIIEncoding ascii = new ASCIIEncoding();
        
        int byteCount = ascii.GetByteCount(chars.ToCharArray(), 6, 8);
        bytes = new Byte[byteCount];
        int bytesEncodedCount = ascii.GetBytes(chars, 6, 8, bytes, 0);
        
        Console.WriteLine(
            "{0} bytes used to encode string.", bytesEncodedCount
        );

        Console.Write("Encoded bytes: ");
        foreach (Byte b in bytes) {
            Console.Write("[{0}]", b);
        }
        Console.WriteLine();
    }
}
Imports System.Text

Class ASCIIEncodingExample
   
    Public Shared Sub Main()
        Dim bytes() As Byte
        Dim chars As String = "ASCII Encoding Example"

        Dim ascii As New ASCIIEncoding()

        Dim byteCount As Integer = ascii.GetByteCount(chars.ToCharArray(), 6, 8)
        bytes = New Byte(byteCount - 1) {}
        Dim bytesEncodedCount As Integer = ascii.GetBytes(chars, 6, 8, bytes, 0)

        Console.WriteLine("{0} bytes used to encode string.", bytesEncodedCount)

        Console.Write("Encoded bytes: ")
        Dim b As Byte
        For Each b In bytes
            Console.Write("[{0}]", b)
        Next b
        Console.WriteLine()
    End Sub
End Class

備註

若要計算儲存所產生位元組所需的 GetBytes 確切陣列大小,應用程式會使用 GetByteCount 。 若要計算陣列大小上限,應用程式應該使用 GetMaxByteCount 。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常會執行得更快。

要轉換的資料,例如從資料流程讀取的資料,只能在循序區塊中使用。 在此情況下,或者,如果資料量太大,因此需要分成較小的區塊,應用程式應該分別使用 Decoder 方法 Encoder 或 方法所提供的 GetDecoderGetEncoder

ASCIIEncoding 不提供錯誤偵測。 任何大於 U+007F 的 Unicode 字元會編碼為 ASCII 問號 (「?」) 。

警告

基於安全性考慮,建議您使用 UTF8EncodingUnicodeEncodingUTF32Encoding ,並啟用錯誤偵測。

另請參閱

適用於

GetBytes(String, Int32, Int32, Byte[], Int32)

將指定 String 中的一組字元編碼成指定的位元組陣列。

public:
 override int GetBytes(System::String ^ chars, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public override int GetBytes (string chars, int charIndex, int charCount, byte[] bytes, int byteIndex);
override this.GetBytes : string * int * int * byte[] * int -> int
Public Overrides Function GetBytes (chars As String, charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer

參數

chars
String

String,包含要編碼的一組字元。

charIndex
Int32

要編碼的第一個字元索引。

charCount
Int32

要編碼的字元數。

bytes
Byte[]

要包含結果位元組序列的位元組陣列。

byteIndex
Int32

要開始寫入結果位元組序列的索引。

傳回

Int32

寫入 bytes 的實際位元組數。

例外狀況

snull

-或- bytesnull

charIndexcharCountbyteIndex 小於零。

-或- charIndexcharCount 不代表 chars 中有效的範圍。

-或- byteIndexbytes 中不是有效的索引。

bytes 到陣列結尾處,byteIndex 沒有足夠的容量容納結果位元組。

發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼) -和- EncoderFallback 設定為 EncoderExceptionFallback

範例

下列範例示範如何使用 GetBytes 方法,從 Unicode 字元陣列編碼某個範圍的專案,並將編碼的位元組儲存在位元組陣列中的元素範圍中。

using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   array<Byte>^bytes;
   
   // Unicode characters.
   
   // Pi
   // Sigma
   array<Char>^chars = {L'\u03a0',L'\u03a3',L'\u03a6',L'\u03a9'};
   ASCIIEncoding^ ascii = gcnew ASCIIEncoding;
   int byteCount = ascii->GetByteCount( chars, 1, 2 );
   bytes = gcnew array<Byte>(byteCount);
   int bytesEncodedCount = ascii->GetBytes( chars, 1, 2, bytes, 0 );
   Console::WriteLine( " {0} bytes used to encode characters.", bytesEncodedCount );
   Console::Write( "Encoded bytes: " );
   IEnumerator^ myEnum = bytes->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Byte b = safe_cast<Byte>(myEnum->Current);
      Console::Write( "[{0}]", b );
   }

   Console::WriteLine();
}
using System;
using System.Text;

class ASCIIEncodingExample {
    public static void Main() {
        Byte[] bytes;
        // Unicode characters.
        Char[] chars = new Char[] {
            '\u0023', // #
            '\u0025', // %
            '\u03a0', // Pi
            '\u03a3'  // Sigma
        };
        
        ASCIIEncoding ascii = new ASCIIEncoding();
        
        int byteCount = ascii.GetByteCount(chars, 1, 2);
        bytes = new Byte[byteCount];
        int bytesEncodedCount = ascii.GetBytes(chars, 1, 2, bytes, 0);
        
        Console.WriteLine(
            "{0} bytes used to encode characters.", bytesEncodedCount
        );

        Console.Write("Encoded bytes: ");
        foreach (Byte b in bytes) {
            Console.Write("[{0}]", b);
        }
        Console.WriteLine();
    }
}
Imports System.Text
Imports Microsoft.VisualBasic.Strings

Class ASCIIEncodingExample
    Public Shared Sub Main()
        Dim bytes() As Byte
        ' Unicode characters.
        ' ChrW(35)  = #
        ' ChrW(37)  = %
        ' ChrW(928) = Pi
        ' ChrW(931) = Sigma
        Dim chars() As Char = {ChrW(35), ChrW(37), ChrW(928), ChrW(931)}

        Dim ascii As New ASCIIEncoding()

        Dim byteCount As Integer = ascii.GetByteCount(chars, 1, 2)
        bytes = New Byte(byteCount - 1){}
        Dim bytesEncodedCount As Integer = ascii.GetBytes(chars, 1, 2, bytes, 0)

        Console.WriteLine("{0} bytes used to encode characters.", bytesEncodedCount)

        Console.Write("Encoded bytes: ")
        Dim b As Byte
        For Each b In bytes
            Console.Write("[{0}]", b)
        Next b
        Console.WriteLine()
    End Sub
End Class

備註

若要計算儲存所產生位元組所需的 GetBytes 確切陣列大小,應用程式會使用 GetByteCount 。 若要計算陣列大小上限,應用程式應該使用 GetMaxByteCount 。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常會執行得更快。

要轉換的資料,例如從資料流程讀取的資料,只能在循序區塊中使用。 在此情況下,或者,如果資料量太大,因此需要分成較小的區塊,應用程式應該分別使用 Decoder 方法 Encoder 或 方法所提供的 GetDecoderGetEncoder

ASCIIEncoding 不提供錯誤偵測。 任何大於 U+007F 的 Unicode 字元會編碼為 ASCII 問號 (「?」) 。

警告

基於安全性考慮,建議您使用 UTF8EncodingUnicodeEncodingUTF32Encoding ,並啟用錯誤偵測。

另請參閱

適用於