Как преобразовать строку в массив байт c
Перейти к содержимому

Как преобразовать строку в массив байт c

  • автор:

Перевод строки в массив битов и обратно

В общем суть такова:
Я пишу на Си шарп программу, которая будет шифровать текст. То есть на входе строка. На выходе строка. Но алгоритм шифрования(пробовал DES,AES,ГОСТ28147-89) подразумевает на входе массив бит длины 64, на выходе аналогично. Пробовал работать с кодировками ASCII,UTF7,UTF8,UTF32.
Проблема в том, что не каждому массиву бит длины 64 соответствует однозначно некий текст, то есть при конвертации массива в строку и обратно на выходе имеем другой массив бит. Желательно использовать кодировку типа ANSI, когда каждому символу соответствует один байт и каждому байту однозначно один символ(биективное отображение).
Вопрос. Какое отображение строки в массив Байтов биективно?

C#: преобразовать строку в массив байтов

только не хардкорно, а программно. Я добился того, что в строке уже есть HEX-значения: «36 31 32 33 34 35 36» теперь надо как-то добавить перед каждым «0х» и добавить в массив. Подскажите, как это сделать!

Отслеживать
user177221
задан 29 апр 2015 в 11:29
Leonard Bertone Leonard Bertone
2,056 4 4 золотых знака 28 28 серебряных знаков 40 40 бронзовых знаков

0x — это конструкция на уровне исходного кода, для того, чтобы компилятор понял что это числа в hex. в рантайме ее не существует, и все числа храняться в бинарном виде, вне зависимости от их представления в тексте программы.

– user177221
29 апр 2015 в 11:52

строку «612345» преобразовать в байты можно так: Split(«612345», 2).Select(s => Convert.ToByte(s, 16)) — метод Split — тут

26 дек 2015 в 18:16
25 янв 2016 в 16:03

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Так должно сработать:

var s = "36 31 32 33 34 35 36"; var bytes = s.Split(' ').Select(_ => int.Parse(_, NumberStyles.HexNumber)); 

Отслеживать
ответ дан 29 апр 2015 в 11:48
3,054 1 1 золотой знак 15 15 серебряных знаков 30 30 бронзовых знаков

Судя по значениям, тебе подойдёт ASCIIEncoding (учти, что не все символы в ней представимы) и UTF8Encoding. Учти, что .NET использует UnicodeEncoding (она же UTF16) для хранения строк, и любые преобразования не всегда однозначны, хотя well-formed строку в UTF16 можно привести в UTF8 и наоборот. Про ASCII даже такое утверждение неверно.
https://msdn.microsoft.com/en-us/library/system.text.asciiencoding(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.text.utf8encoding(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.text.unicodeencoding(v=vs.110).aspx

Если ты хочешь получить генерацию кода, просто примени к массиву байт Select с приведением в 16ричную систему счисления в нужном виде и String.Join для объединения в строку.

Отслеживать
ответ дан 29 апр 2015 в 11:40
122k 24 24 золотых знака 124 124 серебряных знака 297 297 бронзовых знаков
А за что минус? Правильный же ответ. Байты строки без кодировки вовсе не имеют смысла.
29 апр 2015 в 12:13

Преобразование строки в массив байт:

// ожидает строку без пробелов, "612345" public static byte[] StringToByteArray(String hex) < int NumberChars = hex.Length; byte[] bytes = new byte[NumberChars / 2]; for (int i = 0; i < NumberChars; i += 2) bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16); return bytes; >
public static string ByteArrayToString(byte[] ba) < StringBuilder hex = new StringBuilder(ba.Length * 2); foreach (byte b in ba) hex.AppendFormat("", b); return hex.ToString(); > 
public static string ByteArrayToString(byte[] ba)

Преобразовать байт-массив в шестнадцатеричную строку и наоборот в C#

В этой статье мы узнаем, как преобразовать байт-массив в шестнадцатеричную строку и наоборот в C#.
Преобразование байт-массива в шестнадцатеричную строку в C#
Способ 1.

public static string ByteArrayToString(byte[] ba) < StringBuilder hex = new StringBuilder(ba.Length * 2); foreach (byte b in ba) hex.AppendFormat("", b); return hex.ToString(); >

public static string ByteArrayToString(byte[] ba)
using System.Runtime.Remoting.Metadata.W3cXsd2001; public static byte[] GetStringToBytes(string value)

Преобразование шестнадцатеричной строки в байт-массив в C#:
Способ 1.

public static byte[] StringToByteArray(String hex) < int NumberChars = hex.Length; byte[] bytes = new byte[NumberChars / 2]; for (int i = 0; i < NumberChars; i += 2) bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16); return bytes; >

using System.Runtime.Remoting.Metadata.W3cXsd2001; public static string GetBytesToString(byte[] value)

(1 оценок, среднее: 5,00 из 5)

c# — Как конвертировать строку в массив байтов

string to byte array

string to byte array

Для конвертации воспользуемся методом Encoding.GetBytes. Пример будет выглядеть следующим образом:

var text = "mirsovetov.net" // конвертация строку в массива байт byte[] buffer = System.Text.Encoding.Default.GetBytes(text); // конвертация массива байт в строку var result = System.Text.Encoding.Default.GetString(buffer);Code language: C# (cs)

Также важно знать, что для 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: C# (cs)

Похожие темы:

  • C# — как проверить является ли путь файлом или каталогом?
  • ActiveMQ failover transport timeout на подключение
  • С# — Как посчитать md5-хеш для файла?
  • c# — Как конвертировать массив байтов в строку
  • C# — как дублировать строку n раз
  • C# — как дублировать символ n раз

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *