Как я могу вставить в строку специальные символы ASCII (например, со значением ASCII 0x01)?
Я спрашиваю, потому что использую следующее:
str.Replace( "<TAG1>", Convert.ToChar(0x01).ToString() );
и я чувствую, что должен быть способ лучше, чем этот. Есть идеи?
Обновлять:
Также, если я использую эту методологию, нужно ли мне беспокоиться о конфликте Unicode и ASCII?





Я считаю, что вы можете использовать \uXXXX для вставки указанных кодов в свою строку.
ETA: Я только что проверил, и он работает. :-)
using System;
class Uxxxx {
public static void Main() {
Console.WriteLine("\u20AC");
}
}
Будет, если число меньше 0x80.
Also If I use this methodology, do I need to worry about unicode & ASCII clashing?
Ваша первая проблема будет заключаться в конфликте тегов с ASCII. Как только вы дойдете до TAG10, вы столкнетесь с 0x0A: перевод строки. Если вы уверены, что никогда не получите больше девяти тегов, будьте в безопасности. Кодировка Unicode (точнее: UTF8) идентична кодировке ASCII, когда байтовые значения находятся в диапазоне от 0 до 127. Они различаются только тогда, когда установлен верхний бит.
and I feel that there must be a better way than this. Any Ideas?
Похоже, вы пытаетесь управлять двоичным фрагментом с помощью текстовых инструментов. Если вы хотите вставить, например, байт 0x01, вы больше не манипулируете текстом, поскольку вам все равно, что представляет этот байт мог бы, и поскольку похоже, что вам даже все равно, какую кодировку вы будете выводить .
Лучшим способом было бы рассматривать вещь, с которой вы манипулируете, как двоичный фрагмент данных, что позволило бы вам легко вставлять биты и байты, не используя хрупкие обходные пути и не беспокоясь о побочных эффектах.
'\ u0001' - допустимый код Unicode. Текстовый / двоичный формат - это вопрос семантики.
@SebastianGodelet, не совсем. Кодовые точки Unicode отображаются только в байты в формате преобразования Unicode. В приведенном выше примере кодовая точка Unicode u + 0001 представлена байтом 0x01 в форматах преобразования немного. Таким образом, технически при манипулировании двоичным фрагментом вы можете выяснить, какая комбинация кодовой точки и формата трансляции будет отображаться на двоичную последовательность, которую вы хотите вставить, - если такая комбинация существует. Вряд ли семантика. :)
хорошо, но OP уже работает со строкой. Итак, он, надеюсь, не должен сначала помещать двоичные данные в строку. И поскольку строка .NET использует UTF-16, \ u0001 является допустимой последовательностью байтов, описывающей тот же самый управляющий символ ASCII.
@SebastianGodelet, OP - это только технически, работающий со строкой. Они В самом деле пытаются поместить двоичные данные в строку, например значение «0x01». Для <TAG2> OP вставит 0x02 и так далее. (Кстати, тот факт, что .NET использует UTF-16 внутри, здесь не имеет значения - пример OP будет делать то, что вы говорите, из-за того, как работает Convert.ToChar(), обрабатывая аргумент как номер кодовой точки Unicode.)
Представляет ли шестнадцатеричное значение после '\ u' символ ASCII?