将带有转义序列的std::字符串转换为ascii值

Converting std::string with escape sequence to ascii values

本文关键字:字符串 转换 ascii std 转义序列      更新时间:2023-10-16

我有一个std::字符串,我想迭代它,基本上把它变成一个int值流,表示每个字符的ascii值。

我的问题是转义字符。例如"\n"。

std::string str = "hellonhello";
for (char c : str) {
   int asciiVal = static_cast<int>(c);
   // now do something with val. but what about the escape sequence?
} 

问题是,这段代码只是将"\n"视为两个独立的字符。

更新:

这是一个真正的问题。是的,它不会发生在普通的c++代码中,而是发生在包含c/c++摘录的.lex文件中。这是真实的代码和输出:

代码:.lex文件

char *c = yytext;
c[yyleng-1] = '';
c++;
std::string str = c;
cout << "MY STRING: '" << str << "'" << endl;
for (char c : str) {
    int val = static_cast<int>(c);
    std::cout << to_string(val) << std::endl;
}

输出:

MY STRING: 'n' 
92 
110

问题是,该代码只是处理";\n〃;作为两个单独的字符。

有什么帮助吗?

不,没有。转义符和普通字符一样存储,所以n将和ab一样被处理。

http://www.cplusplus.com/doc/tutorial/ntcs/

您可以通过打印asciiVal进行验证。在您的情况下,输出为:

104  // h
101  // e
108  // l
108  // l
111  // o
10   // n
104  // h
101  // e
108  // l
108  // l
111  // o

否,"n"将被视为单个char(0x0a)。如果您想要两个char,请使用"\n"

在您修改后的问题中,很明显,您的输入字符串实际上包含两个单独的字符

(问题的原始版本并非如此。)

因此,您必须自己解决这些问题,方法是扫描''字符,然后(取决于下一个字符是什么),将其替换为所需的元字符。

更改任何需要更改的设置都会容易得多,以使输入字符串实际上包含'n'字符,而不是后面跟着'n'的反斜杠。