Преобразование byte[] в string
Получаю сообщение от сервера по сокету. Метод Receive в качестве параметра принимает byte[] , и, так как я не знаю какого размера будет сообщение, выделяю память с запасом, например, 100 байт.
byte[] byteMessage = new byte[100]; socket.Receive(byteMessage);
После получения конвертирую в строку с помощью:
string strMessage = Encoding.Default.GetString(byteMessage);
- Можно ли получить по сокету размер получаемого сообщения?
- Если нельзя, то как определить конец полученого сообщения?
Отслеживать
11.5k 8 8 золотых знаков 42 42 серебряных знака 69 69 бронзовых знаков
Byte. To String Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразует значение текущего объекта Byte в эквивалентное ему строковое представление.
Перегрузки
Преобразует числовое значение текущего объекта Byte в эквивалентное ему строковое представление с использованием указанных сведений об особенностях форматирования для данного языка и региональных параметров.
Преобразует значение текущего объекта Byte в эквивалентное ему строковое представление с использованием заданного формата.
Преобразует числовое значение текущего объекта Byte в эквивалентное ему строковое представление с использованием указанного формата и сведений об особенностях форматирования для данного языка и региональных параметров.
Преобразует значение текущего объекта Byte в эквивалентное ему строковое представление.
ToString(IFormatProvider)
Преобразует числовое значение текущего объекта Byte в эквивалентное ему строковое представление с использованием указанных сведений об особенностях форматирования для данного языка и региональных параметров.
public: virtual System::String ^ ToString(IFormatProvider ^ provider);
public: System::String ^ ToString(IFormatProvider ^ provider);
public string ToString (IFormatProvider provider);
public string ToString (IFormatProvider? provider);
override this.ToString : IFormatProvider -> string
Public Function ToString (provider As IFormatProvider) As String
Параметры
Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.
Возвращаемое значение
Строковое представление значения данного объекта в формате, заданном в параметре provider .
Реализации
Примеры
В следующем примере выполняется итерация массива байтовых значений и их отображение в консоли путем вызова ToString(IFormatProvider) метода с разными поставщиками формата.
array^ bytes = gcnew array ; array^ providers = ; for each (Byte byteValue in bytes) < for each (CultureInfo^ provider in providers) Console::Write("() ", byteValue.ToString(provider), provider->Name); Console::WriteLine(); > // The example displays the following output to the console: // 0 (en-US) 0 (fr-FR) 0 (de-DE) 0 (es-ES) // 1 (en-US) 1 (fr-FR) 1 (de-DE) 1 (es-ES) // 14 (en-US) 14 (fr-FR) 14 (de-DE) 14 (es-ES) // 168 (en-US) 168 (fr-FR) 168 (de-DE) 168 (es-ES) // 255 (en-US) 255 (fr-FR) 255 (de-DE) 255 (es-ES)
byte[] bytes = ; CultureInfo[] providers = ; foreach (byte byteValue in bytes) < foreach (CultureInfo provider in providers) Console.Write("() ", byteValue.ToString(provider), provider.Name); Console.WriteLine(); > // The example displays the following output to the console: // 0 (en-US) 0 (fr-FR) 0 (de-DE) 0 (es-ES) // 1 (en-US) 1 (fr-FR) 1 (de-DE) 1 (es-ES) // 14 (en-US) 14 (fr-FR) 14 (de-DE) 14 (es-ES) // 168 (en-US) 168 (fr-FR) 168 (de-DE) 168 (es-ES) // 255 (en-US) 255 (fr-FR) 255 (de-DE) 255 (es-ES)
let bytes = [| 0; 1; 14; 168; 255 |] let providers = [ CultureInfo "en-us" CultureInfo "fr-fr" CultureInfo "de-de" CultureInfo "es-es" ] for byteValue in bytes do for provider in providers do printf $" () " printfn "" // The example displays the following output to the console: // 0 (en-US) 0 (fr-FR) 0 (de-DE) 0 (es-ES) // 1 (en-US) 1 (fr-FR) 1 (de-DE) 1 (es-ES) // 14 (en-US) 14 (fr-FR) 14 (de-DE) 14 (es-ES) // 168 (en-US) 168 (fr-FR) 168 (de-DE) 168 (es-ES) // 255 (en-US) 255 (fr-FR) 255 (de-DE) 255 (es-ES)
Dim bytes() As Byte = Dim providers() As CultureInfo = For Each byteValue As Byte In bytes For Each provider As CultureInfo In providers Console.Write(" () ", byteValue.ToString(provider), provider.Name) Next Console.WriteLine() Next ' The example displays the following output to the console: ' 0 (en-US) 0 (fr-FR) 0 (de-DE) 0 (es-ES) ' 1 (en-US) 1 (fr-FR) 1 (de-DE) 1 (es-ES) ' 14 (en-US) 14 (fr-FR) 14 (de-DE) 14 (es-ES) ' 168 (en-US) 168 (fr-FR) 168 (de-DE) 168 (es-ES) ' 255 (en-US) 255 (fr-FR) 255 (de-DE) 255 (es-ES)
Комментарии
Возвращаемое значение отформатировано с помощью описателя общего числового формата («G»).
Параметр provider — это объект, реализующий IFormatProvider интерфейс . Его GetFormat метод возвращает объект , предоставляющий NumberFormatInfo сведения о формате строки, возвращаемой этим методом, с учетом языка и региональных параметров. Объект, который реализует, IFormatProvider может быть любым из следующих:
- Объект CultureInfo , представляющий язык и региональные параметры, правила форматирования которых должны использоваться.
- Объект NumberFormatInfo , содержащий определенные числовые сведения о форматировании для этого значения.
- Пользовательский объект, реализующий IFormatProvider.
Если provider значение равно null или NumberFormatInfo объект не может быть получен из provider , возвращаемое значение форматируется с помощью NumberFormatInfo объекта для текущего языка и региональных параметров потока. Сведения о текущем языке и региональных параметрах потока см. в разделе Thread.CurrentCulture.
.NET предоставляет обширную поддержку форматирования, которая более подробно описана в следующих разделах форматирования:
- Дополнительные сведения об описателях числовых форматов см. в разделах Строки стандартного числового формата и Строки пользовательского числового формата.
- Дополнительные сведения о форматировании см. в разделе Типы форматирования.
См. также раздел
- Parse(String)
- String
- NumberFormatInfo
- Типы форматирования в .NET
Применяется к
ToString(String)
Преобразует значение текущего объекта Byte в эквивалентное ему строковое представление с использованием заданного формата.
public: System::String ^ ToString(System::String ^ format);
public string ToString (string format);
public string ToString (string? format);
override this.ToString : string -> string
Public Function ToString (format As String) As String
Параметры
Строка числового формата.
Возвращаемое значение
Строковое представление текущего объекта Byte, отформатированное, как указано в параметре format .
Исключения
format содержит неподдерживаемый спецификатор. Спецификаторы поддерживаемого формата перечислены в разделе «Примечания».
Примеры
В следующем примере инициализируется Byte значение и отображается в консоли с помощью каждой из поддерживаемых строк стандартного формата и строки настраиваемого формата. Пример выполняется с en-US в качестве текущего языка и региональных параметров.
array^ formats = gcnew array ; Byte number = 240; for each (String^ format in formats) Console::WriteLine("'' format specifier: ", format, number.ToString(format)); // The example displays the following output to the console if the // current culture is en-us: // 'C3' format specifier: $240.000 // 'D4' format specifier: 0240 // 'e1' format specifier: 2.4e+002 // 'E2' format specifier: 2.40E+002 // 'F1' format specifier: 240.0 // 'G' format specifier: 240 // 'N1' format specifier: 240.0 // 'P0' format specifier: 24,000 % // 'X4' format specifier: 00F0 // '0000.0000' format specifier: 0240.0000
string[] formats = ; byte number = 240; foreach (string format in formats) Console.WriteLine("'' format specifier: ", format, number.ToString(format)); // The example displays the following output to the console if the // current culture is en-us: // 'C3' format specifier: $240.000 // 'D4' format specifier: 0240 // 'e1' format specifier: 2.4e+002 // 'E2' format specifier: 2.40E+002 // 'F1' format specifier: 240.0 // 'G' format specifier: 240 // 'N1' format specifier: 240.0 // 'P0' format specifier: 24,000 % // 'X4' format specifier: 00F0 // '0000.0000' format specifier: 0240.0000
let formats = [ "C3"; "D4"; "e1"; "E2"; "F1"; "G"; "N1" "P0"; "X4"; "0000.0000" ] let number = 240uy for format in formats do printfn $"'' format specifier: " // The example displays the following output to the console if the // current culture is en-us: // 'C3' format specifier: $240.000 // 'D4' format specifier: 0240 // 'e1' format specifier: 2.4e+002 // 'E2' format specifier: 2.40E+002 // 'F1' format specifier: 240.0 // 'G' format specifier: 240 // 'N1' format specifier: 240.0 // 'P0' format specifier: 24,000 % // 'X4' format specifier: 00F0 // '0000.0000' format specifier: 0240.0000
Dim formats() As String = Dim number As Byte = 240 For Each format As String In formats Console.WriteLine("'' format specifier: ", _ format, number.ToString(format)) Next ' The example displays the following output to the console if the ' current culture is en-us: ' 'C3' format specifier: $240.000 ' 'D4' format specifier: 0240 ' 'e1' format specifier: 2.4e+002 ' 'E2' format specifier: 2.40E+002 ' 'F1' format specifier: 240.0 ' 'G' format specifier: 240 ' 'N1' format specifier: 240.0 ' 'P0' format specifier: 24,000 % ' 'X4' format specifier: 00F0 ' '0000.0000' format specifier: 0240.0000
Комментарии
Параметр format может быть стандартной или пользовательской строкой числового формата. Поддерживаются все строки стандартного числового формата, отличные от «R» (или «r»), как и все пользовательские символы числового формата. Если format является null или пустой строкой («»), возвращаемое значение форматируется с помощью общего описателя числового формата («G»).
Возвращаемое значение этой функции отформатировано с помощью NumberFormatInfo объекта для текущего языка и региональных параметров потока. Сведения о текущем языке и региональных параметрах потока см. в разделе Thread.CurrentCulture. Чтобы предоставить сведения о форматировании для языков и региональных параметров, отличных от текущего, вызовите Byte.ToString(String, IFormatProvider) метод .
.NET предоставляет обширную поддержку форматирования, которая более подробно описана в следующих разделах форматирования:
- Дополнительные сведения об описателях числовых форматов см. в разделах Строки стандартного числового формата и Строки пользовательского числового формата.
- Дополнительные сведения о форматировании см. в разделе Типы форматирования.
См. также раздел
c# — Как конвертировать массив байтов в строку


Есть некий массив байтов (byte[]), например вычитанный из файла. Нужно данный массив сконвертировать в строку.
Для конвертации воспользуемся методом Encoding.GetString. Пример будет выглядеть следующим образом:
var text = "mirsovetov.net" // конвертация строку в массива байт byte[] buffer = System.Text.Encoding.Default.GetBytes(text); // конвертация массива байт в строку var result = System.Text.Encoding.Default.GetString(buffer);Code language: PHP (php)
Также важно знать, что System.Text.Encoding.Default — текущая кодовая страница ANSI и результаты конвертации будут зависеть от настроек операционной системы. Если вы знаете какая кодировка использовалась изначально — лучше использовать ее. Для Utf8 можно воспользоваться методом UTF8Encoding.GetString
var text = "mirsovetov.net" // конвертация строку в массива байт byte[] buffer = System.Text.Encoding.UTF8.GetBytes(text); // конвертация массива байт в строку var result = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length);Code language: JavaScript (javascript)
Похожие темы:
- C# — как проверить является ли путь файлом или каталогом?
- ActiveMQ failover transport timeout на подключение
- С# — Как посчитать md5-хеш для файла?
- c# — Как конвертировать строку в массив байтов
- C# — как дублировать строку n раз
- C# — как дублировать символ n раз
Преобразование байтов в строку в Python
В этой статье мы рассмотрим, как преобразовать байты в строку в Python. К концу этой статьи у вас будет четкое представление о том, что это за типы и как эффективно обрабатывать данные с их помощью.
В зависимости от версии Python, которую вы используете, эта задача будет отличаться. Хотя Python 2 подошел к концу, многие проекты все еще используют его, поэтому мы включим оба подхода — Python 2 и Python 3.
Преобразование байтов в строку в Python 3
Начиная с Python 3, пришлось отказаться от старого способа работы с ASCII, и Python стал полностью Unicode.
Это означает, что мы потеряли явный тип Unicode: u»string» — каждая строка — это u»string» !
Чтобы отличить эти строки от старых добрых строк байтов, мы познакомились с новым спецификатором для них — b»string» .
Это было добавлено в Python 2.6, но не служило реальной цели, кроме подготовки к Python 3, поскольку все строки были байтовыми строками в 2.6.
Строки байтов в Python 3 официально называются bytes , неизменной последовательностью целых чисел в диапазоне 0
Преобразование байтов в строку с помощью decode()
Давайте посмотрим, как мы можем преобразовать байты в String, используя встроенный метод decode() для класса bytes :
b = b"Lets grab a \xf0\x9f\x8d\x95!" # Let's check the type print(type(b)) # # Now, let's decode/convert them into a string s = b.decode('UTF-8') print(s) # "Let's grab a !"
Передав формат кодирования, мы преобразовали объект bytes в строку и распечатали ее.
Преобразование байтов в строку с кодеками
Как вариант, для этой цели мы можем использовать встроенный модуль codecs :
import codecs b = b'Lets grab a \xf0\x9f\x8d\x95!' print(codecs.decode(b, 'UTF-8')) # "Let's grab a !"
Вам действительно не нужно передавать параметр кодировки, однако рекомендуется передавать его:
print(codecs.decode(b)) # "Let's grab a !"
Преобразование байтов в строку с помощью str()
Наконец, вы можете использовать str() функцию, которая принимает различные значения и преобразует их в строки:
b = b'Lets grab a \xf0\x9f\x8d\x95!' print(str(b, 'UTF-8')) # "Let's grab a !"
Не забудьте указать аргумент кодировки str() , иначе вы можете получить неожиданные результаты:
print(str(b)) # b'Lets grab a \xf0\x9f\x8d\x95!'
Это снова подводит нас к кодировкам. Если вы укажете неправильную кодировку, в лучшем случае произойдет сбой вашей программы, потому что она не может декодировать данные. Например, если бы мы попытались использовать функцию str() с UTF-16 , нас бы встретили:
print(str(b, 'UTF-16')) # '敌❴\u2073牧扡愠\uf020趟↕'
Это даже более важно, учитывая, что Python 3 любит использовать Unicode, поэтому, если вы работаете с файлами или источниками данных, которые используют непонятную кодировку, обязательно обратите на это особое внимание.
Преобразование байтов в строку в Python 2
В Python 2 набор байтов и строка — это практически одно и то же: строки — это объекты, состоящие из однобайтовых символов, что означает, что каждый символ может хранить 256 значений. Вот почему их иногда называют строками байтов.
Это замечательно при работе с байтовыми данными — мы просто загружаем их в переменную и готовы к печати:
s = "Hello world!" print(s) # 'Hello world!' print(len(s)) # 12
Однако использование символов Unicode в строках байтов немного меняет это поведение:
s = "Let's grab a !" print(s) # 'Lets grab a \xf0\x9f\x8d\x95!' # Where has the pizza gone to? print(len(s)) # 17 # Shouldn't that be 15?
Преобразование байтов в Unicode (Python 2)
Здесь нам придется использовать тип Python 2 Unicode , который предполагается и автоматически используется в Python 3. В нем строки хранятся как последовательность кодовых точек, а не байтов.
Представляет собой байты \xf0\x9f\x8d\x95 , последовательность шестнадцатеричных чисел и Python не знает, как представить их в виде ASCII:
>>> u = u"Let's grab a !" u"Let's grab a \U0001f355!"" >>> u "Let's grab a !" # Yum. >>> len(u) 15
Как вы можете видеть выше, строка Unicode содержит \U0001f355 — экранированный символ Unicode, который наш терминал распечатывает как кусок пиццы! Установить это было так же просто, как использовать спецификатор u перед значением байтовой строки.
Итак, как мне переключаться между ними?
Вы можете получить строку Unicode, расшифровав свою байтовую строку. Это можно сделать, создав объект Unicode, предоставив байтовую строку и строку, содержащую имя кодировки в качестве аргументов, или вызвав .decode(encoding) у байтовой строки.
Преобразование байтов в строку с помощью decode() (Python 2)
Вы также можете использовать codecs.encode(s, encoding) из модуля codecs .
>>> s = "Let's grab a \xf0\x9f\x8d\x95!" >>> u = unicode(s, 'UTF-8') >>> u "Let's grab a !" >>> s.decode('UTF-8') "Let's grab a !"
Преобразование байтов в строку с помощью кодеков (Python 2)
Или, используя модуль codecs :
import codecs >>> codecs.decode(s, 'UTF-8') "Let's grab a !"
Помните о своей кодировке
Здесь следует предостеречь — байты могут по-разному интерпретироваться в разных кодировках. Из- за того, что из коробки доступно около 80 различных кодировок, может быть нелегко узнать, есть ли у вас правильная!
s = '\xf8\xe7' # This one will let us know we used the wrong encoding >>> s.decode('UTF-8') UnicodeDecodeError: 'utf8' codec can't decode byte 0xf8 in position 0: invalid start byte # These two overlaps and this is a valid string in both >>> s.decode('latin1') øç s.decode('iso8859_5') јч
Исходное сообщение было либо, øç либо јч , и оба кажутся допустимыми преобразованиями.