Получить шестнадцатеричное или восьмеричное значение из экранированной строки
Вопрос
Я работаю над приложением, которое должно принимать опубликованные данные из формы и обрабатывать их. Одним из шагов этого процесса является удаление данных, которые поступают. Одна проблема, с которой я сталкиваюсь, заключается в том, что данные, которые я получаю из формы, являются двоичными по своей природе, поэтому в них содержатся escape-последовательности, которые мне нужно превратить в символы. Это довольно тривиально с такими символами, как tab и newline, но я не могу понять, как это сделать с шестнадцатеричными и восьмеричными значениями.
Вот пример некоторых входных данных:
"blahblah\nblahblah\x20blahblah\037blahblah"
Когда он будет опубликован, он будет выглядеть примерно так:
"blahblah%5Cnblahblah%5Cx20blahblah%5C037blahblah"
По большей части я сейчас просто просматриваю строку и сканирую «%». Затем я использую sscanf, чтобы получить значение экранированного символа. Тогда, если это 92, я смотрю на следующий персонаж. Если это что-то вроде 'n', я просто заменяю символы на \ n и продолжаю.
Мой вопрос в основном, как я могу просмотреть строку для шестнадцатеричных и восьмеричных значений? В приведенном выше примере, как я могу добраться до% 5C037 и заменить всю эту последовательность соответствующим символом '\ 037'?
Как примечание, я должен сделать все это, потому что данные, принятые в форме, обычно передаются между вызовами сервера, и я пытаюсь собрать тестовое приложение, чтобы позволить пользователю увидеть, что происходит с данных. р>
Решение
strtol
должен делать то, что вам нужно.
Другие советы
Google для реализации URL-декодирования C, и вы найдете много ответов, один из них: