Как преобразовать символ в соответствующую escape-последовательность?

Мне нужно преобразовать escape-последовательности, содержащиеся в не-литеральных строках (чтобы они разбивались на несколько символов, первый из которых \ а остальные просто n, r или даже восьмеричные коды и т. д.) к фактическому символу, представленному этой escape-последовательностью.

Моей первой мыслью было, что это возможно с помощью макроса (например, #define to_escape(x) '\(x)' что не работает), но мне интересно, есть ли на самом деле такой путь и есть ли лучшие способы.

Конечно, я мог бы использовать простой оператор switch для таких экранировок, как \a, \f и тому подобное, но как тогда я справлюсь со всеми восьмеричными и шестнадцатеричными побегами?

1

Решение

Вы можете пойти на это распределение байтов

\'  single quote            byte 0x27 in ASCII encoding
\"  double quote            byte 0x22 in ASCII encoding
\?  question mark           byte 0x3f in ASCII encoding
\\  backslash               byte 0x5c in ASCII encoding
\a  audible bell            byte 0x07 in ASCII encoding
\b  backspace               byte 0x08 in ASCII encoding
\f  form feed - new page    byte 0x0c in ASCII encoding
\n  line feed - new line    byte 0x0a in ASCII encoding
\r  carriage return         byte 0x0d in ASCII encoding
\t  horizontal tab          byte 0x09 in ASCII encoding
\v  vertical tab            byte 0x0b in ASCII encoding

проверьте, совпадают ли их адреса с их гекса-адресами, и вы можете получить следующий символ.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]