Перевод строки в массив битов и обратно
В общем суть такова:
Я пишу на Си шарп программу, которая будет шифровать текст. То есть на входе строка. На выходе строка. Но алгоритм шифрования(пробовал 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# — Как конвертировать строку в массив байтов


Для конвертации воспользуемся методом 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 раз