UnicodeEncoding.GetBytes Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Кодирует набор символов в последовательность байтов.
Перегрузки
GetBytes(Char[], Int32, Int32, Byte[], Int32) |
Кодирует набор символов из заданного массива символов в указанный массив байтов. |
GetBytes(String, Int32, Int32, Byte[], Int32) |
Кодирует набор символов из заданного объекта String в указанный массив байтов. |
GetBytes(String) |
Кодирует набор символов из заданной строки в указанный массив байтов. |
GetBytes(Char*, Int32, Byte*, Int32) |
Кодирует набор символов, начало которого задается указателем символа, в последовательность байтов, которые сохраняются начиная с заданного указателя байта. |
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
.
Исключения
chars
имеет значение null
(Nothing
).
-или-
bytes
имеет значение null
(Nothing
).
Значение параметра charIndex
, charCount
или byteIndex
меньше нуля.
-или-
ПараметрыcharIndex
и charCount
не указывают допустимый диапазон в chars
.
-или-
Значение параметра byteIndex
не является допустимым индексом в bytes
.
Обнаружение ошибок включено, и chars
содержит недопустимую последовательность символов.
-или-
Недостаточно емкости bytes
от byteIndex
до конца массива для размещения полученных байтов.
Произошел откат (см. сведения о кодировке символов в .NET)
- и - Параметру EncoderFallback задается значение EncoderExceptionFallback.
Примеры
В следующем примере показано, как использовать GetBytes метод для кодирования диапазона символов из и String хранения закодированных байтов в диапазоне элементов в массиве байтов.
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
array<Byte>^bytes;
String^ chars = "Unicode Encoding Example";
UnicodeEncoding^ Unicode = gcnew UnicodeEncoding;
int byteCount = Unicode->GetByteCount( chars->ToCharArray(), 8, 8 );
bytes = gcnew array<Byte>(byteCount);
int bytesEncodedCount = Unicode->GetBytes( chars, 8, 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 UnicodeEncodingExample {
public static void Main() {
Byte[] bytes;
String chars = "Unicode Encoding Example";
UnicodeEncoding Unicode = new UnicodeEncoding();
int byteCount = Unicode.GetByteCount(chars.ToCharArray(), 8, 8);
bytes = new Byte[byteCount];
int bytesEncodedCount = Unicode.GetBytes(chars, 8, 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 UnicodeEncodingExample
Public Shared Sub Main()
Dim bytes() As Byte
Dim chars As String = "Unicode Encoding Example"
Dim uni As New UnicodeEncoding()
Dim byteCount As Integer = uni.GetByteCount(chars.ToCharArray(), 8, 8)
bytes = New Byte(byteCount - 1) {}
Dim bytesEncodedCount As Integer = uni.GetBytes(chars, 8, 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 метод обычно выполняется быстрее.
При обнаружении ошибок недопустимая последовательность приводит к тому, что этот метод вызывает исключение ArgumentException. Без обнаружения ошибок недопустимые последовательности игнорируются и исключение не возникает.
Преобразуемые данные, такие как чтение данных из потока, могут быть доступны только в последовательных блоках. В этом случае или если объем данных настолько велик, что его необходимо разделить на меньшие блоки, приложение должно использовать Decoder метод или Encoder GetDecoder GetEncoder метод соответственно.
Важно!
Чтобы обеспечить правильное декодирование закодированных байтов при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с префиксом. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов, записываемых в файл), отвечает разработчик. Метод 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
Параметры
- s
- String
Строка, содержащая набор символов для кодирования.
- charIndex
- Int32
Индекс первого кодируемого символа.
- charCount
- Int32
Число кодируемых символов.
- bytes
- Byte[]
Массив байтов, в который будет помещена результирующая последовательность байтов.
- byteIndex
- Int32
Индекс, с которого начинается запись результирующей последовательности байтов.
Возвращаемое значение
Фактическое число байтов, записанных в bytes
.
Исключения
Значение параметра charIndex
, charCount
или byteIndex
меньше нуля.
-или-
ПараметрыcharIndex
и charCount
не указывают допустимый диапазон в chars
.
-или-
Значение параметра byteIndex
не является допустимым индексом в bytes
.
Обнаружение ошибок включено, и s
содержит недопустимую последовательность символов.
-или-
Недостаточно емкости bytes
от byteIndex
до конца массива для размещения полученных байтов.
Произошел откат (см. сведения о кодировке символов в .NET)
- и - Параметру EncoderFallback задается значение EncoderExceptionFallback.
Примеры
В следующем примере показано, как кодировать диапазон элементов из массива символов Юникода и хранить закодированные байты в диапазоне элементов в массиве байтов.
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'};
UnicodeEncoding^ Unicode = gcnew UnicodeEncoding;
int byteCount = Unicode->GetByteCount( chars, 1, 2 );
bytes = gcnew array<Byte>(byteCount);
int bytesEncodedCount = Unicode->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 UnicodeEncodingExample {
public static void Main() {
Byte[] bytes;
// Unicode characters.
Char[] chars = new Char[] {
'\u0023', // #
'\u0025', // %
'\u03a0', // Pi
'\u03a3' // Sigma
};
UnicodeEncoding Unicode = new UnicodeEncoding();
int byteCount = Unicode.GetByteCount(chars, 1, 2);
bytes = new Byte[byteCount];
int bytesEncodedCount = Unicode.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 UnicodeEncodingExample
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 uni As New UnicodeEncoding()
Dim byteCount As Integer = uni.GetByteCount(chars, 1, 2)
bytes = New Byte(byteCount - 1) {}
Dim bytesEncodedCount As Integer = uni.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 не добавляет преамблирование к началу последовательности закодированных байтов.
См. также раздел
Применяется к
GetBytes(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[]
Применяется к
GetBytes(Char*, Int32, Byte*, Int32)
Важно!
Этот API несовместим с CLS.
Кодирует набор символов, начало которого задается указателем символа, в последовательность байтов, которые сохраняются начиная с заданного указателя байта.
public:
override int GetBytes(char* chars, int charCount, System::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]
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)>]
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
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
(Nothing
).
-или-
bytes
имеет значение null
(Nothing
).
Значение параметра charCount
или byteCount
меньше нуля.
Обнаружение ошибок включено, и chars
содержит недопустимую последовательность символов.
-или-
byteCount
меньше результирующего числа байтов.
Произошел откат (см. сведения о кодировке символов в .NET)
- и - Параметру EncoderFallback задается значение EncoderExceptionFallback.
Комментарии
Чтобы вычислить точный размер массива, который GetBytes требуется сохранить полученные байты, вызовите GetByteCount метод. Чтобы вычислить максимальный размер массива GetMaxByteCount , вызовите метод. Этот GetByteCount метод обычно выделяет меньше памяти, а GetMaxByteCount метод обычно выполняется быстрее.
При обнаружении ошибок недопустимая последовательность приводит к тому, что этот метод вызывает исключение ArgumentException. Без обнаружения ошибок недопустимые последовательности игнорируются и исключение не возникает.
Данные для преобразования, такие как чтение данных из потока, могут быть доступны только в последовательных блоках. В этом случае или если объем данных настолько велик, что его необходимо разделить на меньшие блоки, приложение должно использовать Decoder объект или Encoder объект, предоставленный методом GetDecoder GetEncoder соответственно.
Важно!
Чтобы убедиться, что закодированные байты декодируются должным образом при сохранении в виде файла или в виде потока, можно префиксировать поток закодированных байтов с предварительной записью. Вставка преамблирования в начале потока байтов (например, в начале ряда байтов для записи в файл) является ответственностью разработчика. Метод GetBytes не добавляет преамблирование к началу последовательности закодированных байтов.