【发布时间】:2021-11-27 06:26:14
【问题描述】:
在我的代码中,以下行为我提供了执行任务的数据:
const char *key = "\xf1`\xf8\a\\\x9cT\x82z\x18\x5\xb9\xbc\x80\xca\x15";
问题是它在编译时根据我不完全理解的规则进行转换。 How does "\x" work in a String?
我想做的是得到相同的结果,但从一个与运行时输入的字符串完全相同的字符串中得到。我已经尝试了很多东西并寻找答案,但没有一个足够匹配我能够申请。
我知道 \x 表示一个十六进制数字。但我不知道编译器 (gcc) 以哪种形式“烘焙”出来。
那个`翻译成什么?
“\a”是否与“\x”类似?
【问题讨论】:
-
该反引号没有“翻译”。为什么应该有?如果你读过任何体面的书,你就会知道
'\a'是“警报”或“响铃”的转义码。 -
至于编译器如何识别和翻译这些转义序列,它必须从文件中读取源代码到内存中。虽然它会识别转义反斜杠,然后检查下一个字符。如果它是
x,那么它知道后面有一个十六进制数字,它会读取并转换它,就像你自己做的那样。strtol或std::stoi.