Получить шестнадцатеричное или восьмеричное значение из экранированной строки

StackOverflow https://stackoverflow.com/questions/1613385

  •  06-07-2019
  •  | 
  •  

Вопрос

Я работаю над приложением, которое должно принимать опубликованные данные из формы и обрабатывать их. Одним из шагов этого процесса является удаление данных, которые поступают. Одна проблема, с которой я сталкиваюсь, заключается в том, что данные, которые я получаю из формы, являются двоичными по своей природе, поэтому в них содержатся escape-последовательности, которые мне нужно превратить в символы. Это довольно тривиально с такими символами, как tab и newline, но я не могу понять, как это сделать с шестнадцатеричными и восьмеричными значениями.

Вот пример некоторых входных данных:

"blahblah\nblahblah\x20blahblah\037blahblah"

Когда он будет опубликован, он будет выглядеть примерно так:

"blahblah%5Cnblahblah%5Cx20blahblah%5C037blahblah"

По большей части я сейчас просто просматриваю строку и сканирую «%». Затем я использую sscanf, чтобы получить значение экранированного символа. Тогда, если это 92, я смотрю на следующий персонаж. Если это что-то вроде 'n', я просто заменяю символы на \ n и продолжаю.

Мой вопрос в основном, как я могу просмотреть строку для шестнадцатеричных и восьмеричных значений? В приведенном выше примере, как я могу добраться до% 5C037 и заменить всю эту последовательность соответствующим символом '\ 037'?

Как примечание, я должен сделать все это, потому что данные, принятые в форме, обычно передаются между вызовами сервера, и я пытаюсь собрать тестовое приложение, чтобы позволить пользователю увидеть, что происходит с данных.

Это было полезно?

Решение

strtol должен делать то, что вам нужно.

Другие советы

Google для реализации URL-декодирования C, и вы найдете много ответов, один из них:

http://www.icosaedro.it/apache/urldecode.c

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top