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 が 0 未満です。
フォールバックが発生しました (詳細については、「 .NET での文字エンコード」を参照してください)
および
EncoderFallback は EncoderExceptionFallback に設定されます。
注釈
結果のバイトを格納するために GetBytes に必要な正確な配列サイズを計算するには、 GetByteCount メソッドを呼び出します。 配列の最大サイズを計算するには、 GetMaxByteCount メソッドを呼び出します。 一般に、 GetByteCount メソッドは割り当てるメモリが少なくなりますが、 GetMaxByteCount メソッドの実行速度は一般に速くなります。
エラー検出では、無効なシーケンスにより、このメソッドは ArgumentExceptionをスローします。 エラー検出がないと、無効なシーケンスは無視され、例外はスローされません。
ストリームから読み取られたデータなど、変換するデータは、シーケンシャル ブロックでのみ使用できます。 この場合、またはデータの量が非常に大きくて小さいブロックに分割する必要がある場合、アプリケーションは、GetDecoder メソッドまたは GetEncoder メソッドによって提供されるDecoderまたはEncoderをそれぞれ使用します。
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 または charCount または byteIndex が 0 未満です。
-または-
charIndex および charCount は、 chars内の有効な範囲を示していません。
-または-
byteIndex は、 bytesの有効なインデックスではありません。
エラー検出が有効になっており、 chars に無効な文字シーケンスが含まれています。
-または-
bytes は、結果のバイトに対応するために、 byteIndex から配列の末尾まで十分な容量を持っていません。
フォールバックが発生しました (詳細については、「 .NET での文字エンコード」を参照してください)
および
EncoderFallback は EncoderExceptionFallback に設定されます。
例
次の例では、文字配列から 3 文字をエンコードするために必要なバイト数を決定し、文字をエンコードして、結果のバイトを表示します。
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をスローします。 エラー検出がないと、無効なシーケンスは無視され、例外はスローされません。
ストリームから読み取られたデータなど、変換するデータは、シーケンシャル ブロックでのみ使用できます。 この場合、またはデータの量が非常に大きくて小さいブロックに分割する必要がある場合、アプリケーションは、GetDecoder メソッドまたは GetEncoder メソッドによって提供されるDecoderまたはEncoderをそれぞれ使用します。
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 または charCount または byteIndex が 0 未満です。
-または-
charIndex および charCount は、 s内の有効な範囲を示していません。
-または-
byteIndex は、 bytesの有効なインデックスではありません。
エラー検出が有効になっており、 s に無効な文字シーケンスが含まれています。
-または-
bytes は、結果のバイトに対応するために、 byteIndex から配列の末尾まで十分な容量を持っていません。
フォールバックが発生しました (詳細については、「 .NET での文字エンコード」を参照してください)
および
EncoderFallback は EncoderExceptionFallback に設定されます。
例
次の例では、文字列をエンコードするために必要なバイト数を決定し、文字列をエンコードして、結果のバイトを表示します。
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をスローします。 エラー検出がないと、無効なシーケンスは無視され、例外はスローされません。
ストリームから読み取られたデータなど、変換するデータは、シーケンシャル ブロックでのみ使用できます。 この場合、またはデータの量が非常に大きくて小さいブロックに分割する必要がある場合、アプリケーションは、GetDecoder メソッドまたは GetEncoder メソッドによって提供されるDecoderまたはEncoderをそれぞれ使用します。
Important
エンコードされたバイトがファイルまたはストリームとして保存されるときに正しくデコードされるようにするには、エンコードされたバイトのストリームの前にプリアンブルを付けます。 バイト ストリームの先頭 (ファイルに書き込まれる一連のバイトの先頭など) にプリアンブルを挿入するのは開発者の責任です。 GetBytes メソッドは、エンコードされたバイトのシーケンスの先頭にプリアンブルを付加しません。