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。 若要计算最大大小,请使用 GetMaxByteCountGetByteCount方法通常允许分配较少的内存,而 GetMaxByteCount 方法的执行速度通常更快。

要转换的数据(如从流读取的数据)只能在顺序块中使用。 在这种情况下,或者如果数据量太大,因此需要划分为较小的块,则分别使用DecoderEncoder方法或GetEncoder方法提供GetDecoder的数据量。

ASCIIEncoding 不提供错误检测。 任何大于 U+007F 编码为 ASCII 问号的 Unicode 字符 (“?”) 。

注意

出于安全原因,应使用 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

  • 或 - bytes 上声明的默认值为 null

charCountbyteCount 小于零。

byteCount 少于所产生的字节数。

发生回退(有关详细信息,请参阅采用 .NET 的字符编码) -和- 将 EncoderFallback 设置为 EncoderExceptionFallback

注解

若要计算存储生成的字节所需的 GetBytes 确切数组大小,应用程序使用 GetByteCount。 若要计算最大数组大小,应用程序应使用 GetMaxByteCountGetByteCount方法通常允许分配较少的内存,而 GetMaxByteCount 方法的执行速度通常更快。

要转换的数据(如从流读取的数据)只能在顺序块中使用。 在这种情况下,或者如果数据量太大,因此需要将其划分为较小的块,则应用程序应分别使用DecoderEncoder方法或GetEncoder方法提供GetDecoder的数据量。

ASCIIEncoding 不提供错误检测。 任何大于 U+007F 的 Unicode 字符都转换为 ASCII 问号 (“?) 。

注意

出于安全原因,建议 UTF8Encoding使用应用程序, UnicodeEncodingUTF32Encoding 启用错误检测。

另请参阅

适用于

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

  • 或 - bytes 上声明的默认值为 null

charIndexcharCountbyteIndex 小于零。

  • 或 - charIndexcharCount 不表示 chars中的有效范围。

  • 或 - byteIndex 不是 bytes 中的有效索引。

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。 若要计算最大数组大小,应用程序应使用 GetMaxByteCountGetByteCount方法通常允许分配较少的内存,而 GetMaxByteCount 方法的执行速度通常更快。

要转换的数据(如从流读取的数据)只能在顺序块中使用。 在这种情况下,或者如果数据量太大,因此需要将其划分为较小的块,则应用程序应分别使用DecoderEncoder方法或GetEncoder方法提供GetDecoder的数据量。

ASCIIEncoding 不提供错误检测。 任何大于 U+007F 的 Unicode 字符都编码为 ASCII 问号 (“?”) 。

注意

出于安全原因,建议 UTF8Encoding使用应用程序, UnicodeEncodingUTF32Encoding 启用错误检测。

另请参阅

适用于

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

  • 或 - bytes 上声明的默认值为 null

charIndexcharCountbyteIndex 小于零。

  • 或 - charIndexcharCount 不表示 chars中的有效范围。

  • 或 - byteIndex 不是 bytes 中的有效索引。

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。 若要计算最大数组大小,应用程序应使用 GetMaxByteCountGetByteCount方法通常允许分配较少的内存,而 GetMaxByteCount 方法的执行速度通常更快。

要转换的数据(如从流读取的数据)只能在顺序块中使用。 在这种情况下,或者如果数据量太大,因此需要将其划分为较小的块,则应用程序应分别使用DecoderEncoder方法或GetEncoder方法提供GetDecoder的数据量。

ASCIIEncoding 不提供错误检测。 任何大于 U+007F 的 Unicode 字符都编码为 ASCII 问号 (“?”) 。

注意

出于安全原因,建议 UTF8Encoding使用应用程序, UnicodeEncodingUTF32Encoding 启用错误检测。

另请参阅

适用于