UTF32Encoding.GetBytes 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将一组字符编码为字节序列。
重载
| 名称 | 说明 |
|---|---|
| GetBytes(Char*, Int32, Byte*, Int32) |
将一组从指定字符指针开始的字符编码为从指定字节指针开始存储的字节序列。 |
| GetBytes(Char[], Int32, Int32, Byte[], Int32) |
将指定字符数组中的一组字符编码为指定的字节数组。 |
| GetBytes(String, Int32, Int32, Byte[], Int32) |
将指定 String 字符集编码为指定的字节数组。 |
GetBytes(Char*, Int32, Byte*, Int32)
重要
此 API 不符合 CLS。
将一组从指定字符指针开始的字符编码为从指定字节指针开始存储的字节序列。
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.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
参数
- chars
- Char*
指向要编码的第一个字符的指针。
- charCount
- Int32
要编码的字符数。
- bytes
- Byte*
指向开始写入生成的字节序列的位置的指针。
- byteCount
- Int32
要写入的最大字节数。
返回
在参数指示 bytes 的位置写入的实际字节数。
- 属性
例外
charCount 或 byteCount 小于零。
发生回退(有关详细信息,请参阅 .NET 中的字符编码)
-以及-
注解
若要计算存储生成的字节所需的 GetBytes 确切数组大小,请调用 GetByteCount 该方法。 若要计算最大数组大小,请调用 GetMaxByteCount 该方法。 该方法 GetByteCount 通常分配较少的内存,而 GetMaxByteCount 该方法通常执行速度更快。
在错误检测中,无效序列会导致此方法引发 ArgumentException。 如果没有错误检测,将忽略无效序列,并且不会引发异常。
要转换的数据(例如从流中读取的数据)可能仅在顺序块中可用。 在这种情况下,或者如果数据量太大,因此需要分成较小的块,应用程序将分别使用DecoderEncoder方法或GetEncoder方法提供的GetDecoder块。
Important
为了确保编码的字节在保存为文件或流时正确解码,可以将编码的字节流作为前言前缀。 在字节流开头(如要写入文件的一系列字节的开头)插入谓词是开发人员的责任。 该方法 GetBytes 不会在编码字节序列的开头追加前部分。
另请参阅
适用于
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
开始写入生成的字节序列的索引。
返回
写入 bytes到的实际字节数。
例外
charIndex或charCountbyteIndex小于零。
-或-
charIndex且charCount不表示有效范围。chars
-或-
byteIndex不是有效的索引。bytes
发生回退(有关详细信息,请参阅 .NET 中的字符编码)
-以及-
示例
下面的示例确定从字符数组中对三个字符进行编码所需的字节数,然后对字符进行编码并显示生成的字节。
using System;
using System.Text;
public class SamplesUTF32Encoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
char[] myChars = new char[7] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };
// Create instances of different encodings.
UTF7Encoding u7 = new UTF7Encoding();
UTF8Encoding u8Nobom = new UTF8Encoding( false, true );
UTF8Encoding u8Bom = new UTF8Encoding( true, true );
UTF32Encoding u32Nobom = new UTF32Encoding( false, false, true );
UTF32Encoding u32Bom = new UTF32Encoding( false, true, true );
// Encode three characters starting at index 4 and print out the counts and the resulting bytes.
PrintCountsAndBytes( myChars, 4, 3, u7 );
PrintCountsAndBytes( myChars, 4, 3, u8Nobom );
PrintCountsAndBytes( myChars, 4, 3, u8Bom );
PrintCountsAndBytes( myChars, 4, 3, u32Nobom );
PrintCountsAndBytes( myChars, 4, 3, u32Bom );
}
public static void PrintCountsAndBytes( char[] chars, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-25} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( chars, index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Get the byte order mark, if any.
byte[] preamble = enc.GetPreamble();
// Combine the preamble and the encoded bytes.
byte[] bytes = new byte[preamble.Length + iBC];
Array.Copy( preamble, bytes, preamble.Length );
enc.GetBytes( chars, index, count, bytes, preamble.Length );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UTF8Encoding : 6 12 :EF BB BF CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 8 12 :B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 8 12 :FF FE 00 00 B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesUTF32Encoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF)}
' Create instances of different encodings.
Dim u7 As New UTF7Encoding()
Dim u8Nobom As New UTF8Encoding(False, True)
Dim u8Bom As New UTF8Encoding(True, True)
Dim u32Nobom As New UTF32Encoding(False, False, True)
Dim u32Bom As New UTF32Encoding(False, True, True)
' Encode three characters starting at index 4 and print out the counts and the resulting bytes.
PrintCountsAndBytes(myChars, 4, 3, u7)
PrintCountsAndBytes(myChars, 4, 3, u8Nobom)
PrintCountsAndBytes(myChars, 4, 3, u8Bom)
PrintCountsAndBytes(myChars, 4, 3, u32Nobom)
PrintCountsAndBytes(myChars, 4, 3, u32Bom)
End Sub
Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-25} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(chars, index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Get the byte order mark, if any.
Dim preamble As Byte() = enc.GetPreamble()
' Combine the preamble and the encoded bytes.
' NOTE: In Visual Basic, arrays contain one extra element by default.
' The following line creates an array with the exact number of elements required.
Dim bytes(preamble.Length + iBC - 1) As Byte
Array.Copy(preamble, bytes, preamble.Length)
enc.GetBytes(chars, index, count, bytes, preamble.Length)
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UTF8Encoding : 6 12 :EF BB BF CE B2 F1 8F B3 BF
'System.Text.UTF32Encoding : 8 12 :B2 03 00 00 FF FC 04 00
'System.Text.UTF32Encoding : 8 12 :FF FE 00 00 B2 03 00 00 FF FC 04 00
注解
若要计算存储生成的字节所需的 GetBytes 确切数组大小,请调用 GetByteCount 该方法。 若要计算最大数组大小,请调用 GetMaxByteCount 该方法。 该方法 GetByteCount 通常分配较少的内存,而 GetMaxByteCount 该方法通常执行速度更快。
在错误检测中,无效序列会导致此方法引发 ArgumentException。 如果没有错误检测,将忽略无效序列,并且不会引发异常。
要转换的数据(例如从流中读取的数据)可能仅在顺序块中可用。 在这种情况下,或者如果数据量太大,因此需要分成较小的块,应用程序将分别使用DecoderEncoder方法或GetEncoder方法提供的GetDecoder块。
Important
为了确保编码的字节在保存为文件或流时正确解码,可以将编码的字节流作为前言前缀。 在字节流开头(如要写入文件的一系列字节的开头)插入谓词是开发人员的责任。 该方法 GetBytes 不会在编码字节序列的开头追加前部分。
另请参阅
适用于
GetBytes(String, Int32, Int32, Byte[], Int32)
将指定 String 字符集编码为指定的字节数组。
public:
override int GetBytes(System::String ^ s, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public override int GetBytes(string s, int charIndex, int charCount, byte[] bytes, int byteIndex);
override this.GetBytes : string * int * int * byte[] * int -> int
Public Overrides Function GetBytes (s As String, charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer
参数
- charIndex
- Int32
要编码的第一个字符的索引。
- charCount
- Int32
要编码的字符数。
- bytes
- Byte[]
要包含生成的字节序列的字节数组。
- byteIndex
- Int32
开始写入生成的字节序列的索引。
返回
写入 bytes到的实际字节数。
例外
charIndex或charCountbyteIndex小于零。
-或-
charIndex且charCount不表示有效范围。s
-或-
byteIndex不是有效的索引。bytes
发生回退(有关详细信息,请参阅 .NET 中的字符编码)
-以及-
示例
以下示例确定对字符串进行编码所需的字节数,然后对字符串进行编码并显示生成的字节数。
using System;
using System.Text;
public class SamplesUTF32Encoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";
// Create instances of different encodings.
UTF7Encoding u7 = new UTF7Encoding();
UTF8Encoding u8Nobom = new UTF8Encoding( false, true );
UTF8Encoding u8Bom = new UTF8Encoding( true, true );
UTF32Encoding u32Nobom = new UTF32Encoding( false, false, true );
UTF32Encoding u32Bom = new UTF32Encoding( false, true, true );
// Get the byte counts and the bytes.
PrintCountsAndBytes( myStr, u7 );
PrintCountsAndBytes( myStr, u8Nobom );
PrintCountsAndBytes( myStr, u8Bom );
PrintCountsAndBytes( myStr, u32Nobom );
PrintCountsAndBytes( myStr, u32Bom );
}
public static void PrintCountsAndBytes( String s, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-25} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( s.Length );
Console.Write( " {0,-3} :", iMBC );
// Get the byte order mark, if any.
byte[] preamble = enc.GetPreamble();
// Combine the preamble and the encoded bytes.
byte[] bytes = new byte[preamble.Length + iBC];
Array.Copy( preamble, bytes, preamble.Length );
enc.GetBytes( s, 0, s.Length, bytes, preamble.Length );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UTF8Encoding : 12 24 :EF BB BF 7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 24 28 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 24 28 :FF FE 00 00 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesUTF32Encoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)
' Create instances of different encodings.
Dim u7 As New UTF7Encoding()
Dim u8Nobom As New UTF8Encoding(False, True)
Dim u8Bom As New UTF8Encoding(True, True)
Dim u32Nobom As New UTF32Encoding(False, False, True)
Dim u32Bom As New UTF32Encoding(False, True, True)
' Get the byte counts and the bytes.
PrintCountsAndBytes(myStr, u7)
PrintCountsAndBytes(myStr, u8Nobom)
PrintCountsAndBytes(myStr, u8Bom)
PrintCountsAndBytes(myStr, u32Nobom)
PrintCountsAndBytes(myStr, u32Bom)
End Sub
Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-25} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(s)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
Console.Write(" {0,-3} :", iMBC)
' Get the byte order mark, if any.
Dim preamble As Byte() = enc.GetPreamble()
' Combine the preamble and the encoded bytes.
' NOTE: In Visual Basic, arrays contain one extra element by default.
' The following line creates an array with the exact number of elements required.
Dim bytes(preamble.Length + iBC - 1) As Byte
Array.Copy(preamble, bytes, preamble.Length)
enc.GetBytes(s, 0, s.Length, bytes, preamble.Length)
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UTF8Encoding : 12 24 :EF BB BF 7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UTF32Encoding : 24 28 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'System.Text.UTF32Encoding : 24 28 :FF FE 00 00 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
注解
若要计算存储生成的字节所需的 GetBytes 确切数组大小,请调用 GetByteCount 该方法。 若要计算最大数组大小,请调用 GetMaxByteCount 该方法。 该方法 GetByteCount 通常分配较少的内存,而 GetMaxByteCount 该方法通常执行速度更快。
在错误检测中,无效序列会导致此方法引发 ArgumentException。 如果没有错误检测,将忽略无效序列,并且不会引发异常。
要转换的数据(例如从流中读取的数据)可能仅在顺序块中可用。 在这种情况下,或者如果数据量太大,因此需要分成较小的块,应用程序将分别使用DecoderEncoder方法或GetEncoder方法提供的GetDecoder块。
Important
为了确保编码的字节在保存为文件或流时正确解码,可以将编码的字节流作为前言前缀。 在字节流开头(如要写入文件的一系列字节的开头)插入谓词是开发人员的责任。 该方法 GetBytes 不会在编码字节序列的开头追加前部分。