首页 > 解决方案 > 如何在运行时复制编译时十六进制字符串解释!?C++

问题描述

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

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

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

我想做的是得到相同的结果,但从一个与运行时输入的字符串完全相同的字符串。我已经尝试了很多东西并寻找答案,但没有一个足够接近我能够申请的答案。

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

那 ` 翻译成什么?

"\a" 是否执行类似于 "\x" 的操作?

标签: c++arrayshex

解决方案


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

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

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


推荐阅读