- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将此输入 \x01\xc3\xa4\xc3\xb6\xc3\xbc\xff
转义为此 \\x01\\xc3\\xa4\\xc3\\xb6\\xc3\\xbc\\xff
使用printf("%s",input)
打印出来。一般来说,我必须转义各种输入,并使用\t、\n 等转义序列...
为此,我编写了以下函数:
void kvstr_escape_string(char* dest, const KV_Buffer* src)
{
char c;
int i = 0;
const char* data = src->data; // src->data is a char*
while (src != NULL && i < src->length && (c = *(data++))) {
switch(c) {
case '\a':
*(dest++) = '\\';
*(dest++) = 'a';
break;
case '\b':
*(dest++) = '\\';
*(dest++) = 'b';
break;
case '\t':
*(dest++) = '\\';
*(dest++) = 't';
break;
case '\n':
*(dest++) = '\\';
*(dest++) = 'n';
break;
case '\v':
*(dest++) = '\\';
*(dest++) = 'v';
break;
case '\f':
*(dest++) = '\\';
*(dest++) = 'f';
break;
case '\r':
*(dest++) = '\\';
*(dest++) = 'r';
break;
case '\\':
*(dest++) = '\\';
break;
case '\"':
*(dest++) = '\\';
*(dest++) = '\"';
break;
case '\x01':
*(dest++) = '\\';
*(dest++) = 'x';
*(dest++) = '0';
*(dest++) = '1';
break;
// Here i need something to handle \xHH
default:
*(dest++) = c;
}
i++;
}
*(dest++) = '\0';
}
我的问题是,在 case '\x01':
的情况下,如何处理函数中所示的所有不同\xHH 输入?我应该使用正则表达式吗?
[更新]看看卡雷尔的回答。如果您想知道默认 block 应该是什么样子,这里有一个示例:
default:
if (c < 32 || c > 126){
*(dest++) = '\\';
*(dest++) = 'x';
sprintf(d, "%.2x", c);
*(dest++) = d[0];
*(dest++) = d[1];
}else{
*(dest++) = c;
}
最佳答案
你的代码
case '\x01':
*(dest++) = '\\';
*(dest++) = 'x';
*(dest++) = '0';
*(dest++) = '1';
break;
基本上只是为了匹配具有值 1 的文字字节。您也可以将其写为
case 1:
...
我会将此 block 移至default
情况,并匹配c
是否为31 或更少(32 是空格)。此外,您可能想要转义 ASCII 值大于 126(波浪号)的字符。从我的头顶上掉下来:
default:
if (c < 32 || c > 126)
// add "\\x" followed by two hex digits of the value of c
else
// simply add the value of c
对于将值转换为两个十六进制字符,我将使用一个小的转换缓冲区和sprintf()
。希望这有帮助!
关于检查 char 是否以\xHH 表示法写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776143/
谁能解释一下字符常量\000 和\xhh 的用法,即字符常量中的八进制数和十六进制数? 最佳答案 在 C 中,字符串以值为零 (0) 的字符结束。可以这样写: char zero = 0; 但这在字符
我想将文件中的十六进制数转换为整数。 字符串如下所示: \0\0\x05\xa0 这应该是 1440。如果我尝试: int i = '\x05' 我得到 5。 但是如果我对 \xa0 做同样的事情,我
我正在尝试将此输入 \x01\xc3\xa4\xc3\xb6\xc3\xbc\xff 转义为此 \\x01\\xc3\\xa4\\xc3\\xb6\\xc3\\xbc\\xff 使用printf("%
我有:b'{"street":"Grossk\\xc3\\xb6lnstra\\xc3\\x9fe"}' 我需要:'{"street": "Grosskölnstraße"}' 我试过: s.deco
我遇到过需要将一串字符转换成python中的字符串的情况。 s = "\\x80\\x78\\x07\\x00\\x75\\xb3" print s #gives: \x80\x78\x07\x00\
我正在尝试使用需要多个十六进制值的字符来转换字符串,如下所示: 'Mahou Shoujo Madoka\xe2\x98\x85Magica' 到它的 unicode 表示: 'Mahou Shouj
我是一名优秀的程序员,十分优秀!