从转义字符串中获取十六进制或八进制值

时间:2009-10-23 13:21:05

标签: c string escaping

我正在开发一个需要接受表单中的发布数据并进行处理的应用程序。这个过程的一个步骤是取消进入的数据。我面临的一个问题是我从表单中抓取的数据本质上是二进制的,因此它包含我需要转换回字符的转义序列。这对于tab和换行符这样的字符来说是相当微不足道的,但我无法弄清楚如何使用十六进制和八进制值来实现这一点。

以下是一些输入数据的示例:

"blahblah\nblahblah\x20blahblah\037blahblah"

发布时,它看起来像是:

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

在大多数情况下,我目前正在浏览字符串并扫描'%'。然后我使用sscanf来获取转义字符的值。如果是92,我会看下一个角色。如果它类似于'n',我只需用'\ n'替换字符并继续。

我的问题基本上是如何扫描字符串中的十六进制和八进制值?在上面的例子中,我怎么能得到%5C037并用适当的'\ 037'字符替换整个序列?

作为一个注释,我必须完成所有这些,因为表单上接受的数据通常在服务器调用之间传递,我正在尝试将测试应用程序组合在一起,以便用户可以看到发生了什么。数据

2 个答案:

答案 0 :(得分:4)

Google for url解码C实现,你会发现很多答案,其中之一是:

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

答案 1 :(得分:2)

strtol应该做你需要的。