Поделиться через


UTF8Encoding.GetBytes Метод

Определение

Кодирует набор символов в последовательность байтов.

Перегрузки

GetBytes(String)

Кодирует символы из указанного объекта String в последовательность байтов.

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

Кодирует заданный диапазон символов в заданный диапазон байтов.

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

Кодирует набор символов, начало которого задается указателем символа, в последовательность байтов, которые сохраняются начиная с заданного указателя байта.

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

Кодирует набор символов из заданного массива символов в указанный массив байтов.

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

Кодирует набор символов из заданного объекта String в указанный массив байтов.

GetBytes(String)

Кодирует символы из указанного объекта String в последовательность байтов.

public:
 override cli::array <System::Byte> ^ GetBytes(System::String ^ s);
public override byte[] GetBytes (string s);
override this.GetBytes : string -> byte[]
Public Overrides Function GetBytes (s As String) As Byte()

Параметры

s
String

Кодируемая строка символов.

Возвращаемое значение

Byte[]

Массив байтов, содержащий закодированные символы из строки, заданной параметром s.

Применяется к

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

Исходный код:
UTF8Encoding.cs
Исходный код:
UTF8Encoding.cs
Исходный код:
UTF8Encoding.cs

Кодирует заданный диапазон символов в заданный диапазон байтов.

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>

Диапазон, содержащий результирующий набор байтов.

Возвращаемое значение

Фактическое число байтов, записанных в bytes.

Комментарии

Чтобы вычислить точный размер, необходимый GetBytes для хранения результирующего байта, вызовите GetByteCount метод . Чтобы вычислить максимальный размер, вызовите GetMaxByteCount метод . Метод GetByteCount обычно выделяет меньше памяти, в то время как GetMaxByteCount метод обычно выполняется быстрее.

При обнаружении ошибок недопустимая последовательность приводит к тому, что этот метод создает ArgumentException исключение. Без обнаружения ошибок недопустимые последовательности игнорируются, и исключение не создается.

Данные для преобразования, например данные, считываемые из потока, могут быть доступны только в последовательных блоках. В этом случае или если объем данных настолько велик, что их необходимо разделить на более мелкие блоки, используйте Decoder или Encoder , возвращаемые методом GetDecoder или методом GetEncoder соответственно.

Чтобы обеспечить правильное декодирование закодированных байтов при их сохранении в виде файла или потока, можно префиксировать поток закодированных байтов с помощью префикса. За вставку в начале потока байтов (например, в начало ряда байтов для записи в файл) отвечает разработчик. Метод GetBytes не добавляет начало к началу последовательности закодированных байтов.

Применяется к

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

Исходный код:
UTF8Encoding.cs
Исходный код:
UTF8Encoding.cs
Исходный код:
UTF8Encoding.cs

Важно!

Этот 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.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

Максимальное число байтов для записи.

Возвращаемое значение

Фактическое число байтов, записанных в местоположение, указанное с помощью параметра bytes.

Атрибуты

Исключения

chars имеет значение null.

-или-

bytes имеет значение null.

Значение параметра charCount или byteCount меньше нуля.

Обнаружение ошибок включено, и chars содержит недопустимую последовательность символов.

-или-

byteCount меньше результирующего числа байтов.

Произошел откат (см. сведения о кодировке символов в .NET)

- и -

Параметру EncoderFallback задается значение EncoderExceptionFallback.

Комментарии

Чтобы вычислить точный размер массива, необходимый GetBytes для хранения результирующего байта, вызовите GetByteCount метод . Чтобы вычислить максимальный размер массива, вызовите GetMaxByteCount метод . Метод GetByteCount обычно выделяет меньше памяти, в то время как GetMaxByteCount метод обычно выполняется быстрее.

При обнаружении ошибок недопустимая последовательность приводит к тому, что этот метод создает ArgumentException исключение. Без обнаружения ошибок недопустимые последовательности игнорируются, и исключение не создается.

Данные для преобразования, например данные, считываемые из потока, могут быть доступны только в последовательных блоках. В этом случае или если объем данных настолько велик, что их необходимо разделить на более мелкие блоки, используйте Decoder или Encoder , возвращаемые методом GetDecoder или методом GetEncoder соответственно.

Чтобы обеспечить правильное декодирование закодированных байтов при их сохранении в виде файла или потока, можно префиксировать поток закодированных байтов с помощью префикса. За вставку в начале потока байтов (например, в начало ряда байтов для записи в файл) отвечает разработчик. Метод GetBytes не добавляет начало к началу последовательности закодированных байтов.

См. также раздел

Применяется к

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

Исходный код:
UTF8Encoding.cs
Исходный код:
UTF8Encoding.cs
Исходный код:
UTF8Encoding.cs

Кодирует набор символов из заданного массива символов в указанный массив байтов.

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.

Исключения

chars имеет значение null.

-или-

bytes имеет значение null.

Значение параметра charIndex, charCount или byteIndex меньше нуля.

-или-

ПараметрыcharIndex и charCount не указывают допустимый диапазон в chars.

-или-

Значение параметра byteIndex не является допустимым индексом в bytes.

Обнаружение ошибок включено, и chars содержит недопустимую последовательность символов.

-или-

Недостаточно емкости bytes от byteIndex до конца массива для размещения полученных байтов.

Произошел откат (см. сведения о кодировке символов в .NET)

- и -

Параметру EncoderFallback задается значение EncoderExceptionFallback.

Примеры

В следующем примере метод используется GetBytes для кодирования диапазона символов из строки и сохраняет закодированные байты в диапазоне элементов в массиве байтов.

using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   array<Byte>^bytes;
   String^ chars = "UTF8 Encoding Example";
   UTF8Encoding^ utf8 = gcnew UTF8Encoding;
   int byteCount = utf8->GetByteCount( chars->ToCharArray(), 0, 13 );
   bytes = gcnew array<Byte>(byteCount);
   int bytesEncodedCount = utf8->GetBytes( chars, 0, 13, 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 UTF8EncodingExample {
    public static void Main() {
        Byte[] bytes;
        String chars = "UTF8 Encoding Example";
        
        UTF8Encoding utf8 = new UTF8Encoding();
        
        int byteCount = utf8.GetByteCount(chars.ToCharArray(), 0, 13);
        bytes = new Byte[byteCount];
        int bytesEncodedCount = utf8.GetBytes(chars, 0, 13, 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 UTF8EncodingExample
    
    Public Shared Sub Main()
        Dim bytes() As Byte
        Dim chars As String = "UTF8 Encoding Example"
        
        Dim utf8 As New UTF8Encoding()
        
        Dim byteCount As Integer = utf8.GetByteCount(chars.ToCharArray(), 0, 13)
        bytes = New Byte(byteCount - 1) {}
        Dim bytesEncodedCount As Integer = utf8.GetBytes(chars, 0, 13, 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 метод обычно выполняется быстрее.

При обнаружении ошибок недопустимая последовательность приводит к тому, что этот метод создает ArgumentException исключение. Без обнаружения ошибок недопустимые последовательности игнорируются, и исключение не создается.

Данные для преобразования, например данные, считываемые из потока, могут быть доступны только в последовательных блоках. В этом случае или, если объем данных настолько велик, что их необходимо разделить на более мелкие блоки, используйте Decoder или , предоставленные Encoder методом GetDecoder или методом GetEncoder соответственно.

Чтобы обеспечить правильное декодирование закодированных байтов при их сохранении в виде файла или потока, можно префиксировать поток закодированных байтов с помощью префикса. За вставку в начале потока байтов (например, в начало ряда байтов для записи в файл) отвечает разработчик. Метод GetBytes не добавляет начало к началу последовательности закодированных байтов.

См. также раздел

Применяется к

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

Исходный код:
UTF8Encoding.cs
Исходный код:
UTF8Encoding.cs
Исходный код:
UTF8Encoding.cs

Кодирует набор символов из заданного объекта 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

Параметры

s
String

Объект String, содержащий кодируемый набор символов.

charIndex
Int32

Индекс первого кодируемого символа.

charCount
Int32

Число кодируемых символов.

bytes
Byte[]

Массив байтов, в который будет помещена результирующая последовательность байтов.

byteIndex
Int32

Индекс, с которого начинается запись результирующей последовательности байтов.

Возвращаемое значение

Фактическое число байтов, записанных в bytes.

Исключения

s имеет значение null.

-или-

bytes имеет значение null.

Значение параметра charIndex, charCount или byteIndex меньше нуля.

-или-

ПараметрыcharIndex и charCount не указывают допустимый диапазон в chars.

-или-

Значение параметра byteIndex не является допустимым индексом в bytes.

Обнаружение ошибок включено, и s содержит недопустимую последовательность символов.

-или-

Недостаточно емкости bytes от byteIndex до конца массива для размещения полученных байтов.

Произошел откат (см. сведения о кодировке символов в .NET)

- и -

Параметру EncoderFallback задается значение EncoderExceptionFallback.

Примеры

В следующем примере метод используется GetBytes для кодирования диапазона элементов из массива символов Юникода и хранения закодированных байтов в диапазоне элементов в массиве байтов.

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'};
   UTF8Encoding^ utf8 = gcnew UTF8Encoding;
   int byteCount = utf8->GetByteCount( chars, 1, 2 );
   bytes = gcnew array<Byte>(byteCount);
   int bytesEncodedCount = utf8->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 UTF8EncodingExample {
    public static void Main() {
        Byte[] bytes;
        // Unicode characters.
        Char[] chars = new Char[] {
            '\u0023', // #
            '\u0025', // %
            '\u03a0', // Pi
            '\u03a3'  // Sigma
        };
        
        UTF8Encoding utf8 = new UTF8Encoding();
        
        int byteCount = utf8.GetByteCount(chars, 1, 2);
        bytes = new Byte[byteCount];
        int bytesEncodedCount = utf8.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 UTF8EncodingExample
    
    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 utf8 As New UTF8Encoding()
        
        Dim byteCount As Integer = utf8.GetByteCount(chars, 1, 2)
        bytes = New Byte(byteCount - 1) {}
        Dim bytesEncodedCount As Integer = utf8.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 метод обычно выполняется быстрее.

При обнаружении ошибок недопустимая последовательность приводит к тому, что этот метод вызывает ArgumentException исключение. Без обнаружения ошибок недопустимые последовательности игнорируются, и исключение не создается.

Преобразуемые данные, например данные, считываемые из потока, могут быть доступны только в последовательных блоках. В этом случае или, если объем данных настолько велик, что их необходимо разделить на более мелкие блоки, используйте Decoder или Encoder , предоставленные методом GetDecoder или методом GetEncoder соответственно.

Чтобы обеспечить правильное декодирование закодированных байтов при их сохранении в виде файла или потока, можно префиксировать поток закодированных байтов с помощью префикса. За вставку заготовки в начало потока байтов (например, в начале ряда байтов для записи в файл) отвечает разработчик. Метод GetBytes не добавляет заготовку к началу последовательности закодированных байтов.

См. также раздел

Применяется к