Popou
@Popou
Программист энтузиаст , обожаю саморефлексию

Как хранить строку в виде байтов?

Кодировка строки utf-8, я знаю как это кодировка работает, и какие методы C# могут с ней работать.

У меня есть массив байтов, и вот в чем дело, сами эти байты, это просто инструкции, типо запушить в стак, сложить два элемента в стаке, и тд, и тп. Но как мне запушить строку? Знаю что в стак конечно пушиться ссылка на строку, а не сама строка, но это за меня делает c# . И вот вопрос, а как определить что строка кончилась? Использовать для этого определённый набор байтов или символ(в принципе тоже самое что и байты) и определять это как конец строки? Или вначале объявлять длинну строки? Тогда это тоже проблема так что бы запушить одну английскую "a" уйдёт 6 байтов = 1 на команду пуша строки, 4 на размер, и 1 байт сама строка, знаю выглядит нелепо что я за каждый байт цепляюсь, но мне просто интересно, как нужно правильно это делать.
  • Вопрос задан
  • 507 просмотров
Решения вопроса 1
@Akela_wolf
Extreme Programmer
Что-то я не понимаю чего вы хотите добиться. То что вы говорить - низкоуровневое программирование, для этого вам не нужен C#. Берите C/C++ и наслаждайтесь прямой работой с памятью.

Вообще со строками есть два подхода. Первый использовал Pascal: в нулевом байте строки хранится её длина. Так как паскаль использовал однобайтную кодировку (ANSI), то этого было достаточно для хранения строк длиной до 255 байт. Вы, в принципе, можете использовать и 2 и 4 байта. И это неплохо работало.
Второй подход - это подход из C++, когда строка заканчивается символом '\0' (zero-terminated string). Тут тоже есть свои тонкости, в основном связанные с тем, что при определении длины строки нужно помнить что '\0' не входит в её длину. Еще есть потенциальная ошибка, связанная с выходом за пределы строки и повреждением следующих за ней блоков памяти.

Выбирайте - какой подход вам больше нравится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@DidarCoder
.NET C#
Для того чтобы хранить строки в байте вам в помощь может придти MemoryStream:

byte[] data = new byte[255];
MemoryStream memory  = new MemoryStream(data);

StreamWriter writer = new StreamWriter(memory);
StreamReader reader = new StreamReader(memory);


С помощью writer и reader можете сделать ввод/ввывод строк!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы