2010-01-08 27 views
0

我有一個十六進制值的字符串保存在文本文件中。我想把它變成一種c風格的包含格式來複制並粘貼到我的代碼中。我試圖使用xxd有一個功能來做到這一點,但由於某種原因,當我使用我的文件它需要該字符串(它認爲它不是十六進制),並進一步將其轉換爲十六進制。文件的十六進制字符串。需要格式化,所以我可以在程序中使用它

無論如何,或者更簡單的方法來做到這一點在c + +。我不確定。對C++來說很新,只是在這裏學習。是

的文件的內容樣本如下:

AFAB2591CFB70E77C7C417D8C389507A541D0350752EE9E8C12D76E8674677C166A5ACA65ECFDE7EC90DC8E7D6D621438FEF7DD38B0EDEA3D44BDB9D6E7E1CA0FBA30B507EA70B2A52434F64092EC13BD12F8F1C2BED6EE1ADE7 

所以越來越像0xAF執行,是0xAB等是我期待的。

我還注意到,當我使用xxd,即使我只是把A放在文件中...其結果是410a。我也不明白。它是顯示一個字而不是一個字節?

+0

過濾<的'410a'你看到'xxd'是ASCII碼A(0×41)和ASCII LF(換行符,0x0A)的代碼。 – mrkj 2010-01-08 18:08:32

回答

0

確定好第一花花公子得到的代碼查找的字符串,像這樣

#include <iostream> 
#include <conio.h> 
#include <fstream> 
#include <iostream> 

using namespace std; 

class FindHex { 
    string x, y; 
    public: 
    void set_values (string,string); 
    string found() {return (x,y);} 
}; 

void FindHex::set_values (string a, string b) { 
    cout<<a<<" "<<b; 
    x = a; 
    y = b; 
} 

FindHex hex; 

int main() { 
    char Name[10]; 
    char LName[10]; 
    ifstream inf("Data.txt"); 

    while(!inf.getline(Name, 30, '0x').eof()) 
    { 
     inf.getline(LName, sizeof(LName)); 
     hex.set_values (Name,LName); 
     hex.found(); 
     cin.ignore();  
    } 

} 
+0

哈哈,我只是重新編寫腳本,並在左邊的LNAME和名稱,所以享受:) – H4cKL0rD 2010-01-08 17:43:01

0
string s = ...; // Read the string into this 
stringstream buffer; 

for (size_t i = 0; i < s.length(); i += 2) { 
    char tmp[3] = { s[i], s[i + 1], 0 }; 
    buffer << (char)strtol(tmp, NULL, 16); 
} 

const string final = buffer.str(); 

你去那裏!

1

你可以使用任何正則表達式編輯器來轉換

AFAB2591CFB70 ...

到0xAF執行,是0xAB,0x25,0x91,0xCF,0xB7,...

我使用MSFT的Visual Studio這是與「選擇和替換」工具的RE選項對齊。查找任何由集合[0-9A-Fa-f]中的任何字符組成的表達式,後面跟着同一集合中的另一個字符;標記表達式;將其替換爲「0x」+帶標籤的表達式+「,」。 (不匹配整個單詞)。

如果您使用的是其他GUI開發工具,則應該很容易找到一條命令行sed(Linux或Cygwin)或類似的東西。

0

看起來像功課,但什麼。編譯到這個filter.exe然後:inputfile.txt> outputfile.cpp

#include <iostream> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    char a, b; 
    while (!cin.eof()) { 
     cin >> a >> b; 
     cout << "0x" << a << b << ", "; 
    } 
    return 0; 
} 
相關問題