簡體   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