繁体   English   中英

如何在运行时复制编译时十六进制字符串解释? c++

[英]How can I replicate compile time hex string interpretation at run time!? c++

在我的代码中,以下行为我提供了执行任务的数据:

const char *key = "\xf1`\xf8\a\\\x9cT\x82z\x18\x5\xb9\xbc\x80\xca\x15";

问题是它在编译时根据我不完全理解的规则进行了转换。 “\x”在字符串中如何工作?

我想要做的是获得相同的结果,但来自与运行时输入的字符串完全相同的字符串。 我已经尝试了很多事情并寻找答案,但没有一个足够匹配以至于我无法申请。

我知道 \x 表示一个十六进制数。 但我不知道编译器 (gcc) 以哪种形式“烘烤”了它。

那`翻译成什么?

"\a" 是否做类似 "\x" 的事情?

这确实是由编译器提供的,但这部分不是标准库的成员。 这意味着您有 3 种方法:

  • 动态编写一个包含该字符串的 C++ 源文件,并将其写入其标准 output。编译它并(提供popen可用)从您的主程序执行它并读取它的输入。 是不是很丑。。。
  • 使用现有编译器的源代码,或直接使用其内部库。 Clang 可能是一个很好的起点,因为它被设计成模块化的。 但是可能需要大量的工作才能找到该死的特定点的编码位置以及如何使用它......
  • 只需模仿编译器的功能,然后手动编写自己的解析器即可。 这并不难,并且会告诉你为什么测试是有用的......

如果直到这里还不清楚,我强烈建议您使用第三种方式;-)

如果您想翻译在运行时作为输入获得的字符串中的“转义”代码,那么您需要自己明确地进行。

一种方法是将输入读入一个字符串。 然后将源字符串中的字符一个一个地复制到新的目标字符串中。 如果你看到一个反斜杠然后你丢弃它,获取下一个字符,如果它是一个x你可以使用例如std::stoi将接下来的几个字符转换成它对应的 integer 值,和 append 这个数字到目标字符串(或者使用std::to_string添加它,或使用 output 字符串流和正常的“输出”运算符<< )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM