2013-07-18 30 views
-1

我讀取線從所述命令行的字符即與字符的在C++

的progname 0102030405060708

argv[1]陣列處理的類型是char *argv[]

argv[1]0102030405060708

這應該被用作一個8字符的列表rs以十六進制表示。
我需要做的是取這個值並將其分成幾部分。即

01,02,03,04 ...

,並利用它們作爲十六進制值。

基本上我需要獲得字符是01, 02, 03....以十六進制表示

我不知道如何做到這一點。任何幫助將不勝感激。

+10

你嘗試過什麼? – Rapptz

+0

如果你給我們這個案子的預期產出,你的目標會更清晰。目前,很難確切地告訴你想要達到的目標。另外,您可以通過接受由空格分隔的2個字符串來實現分割。然後他們會從'argv [1]'到'argv [argc - 1]'存在。 –

+0

這個問題的可能重複http://stackoverflow.com/questions/3408706/hex-string-to-byte-array-in-c – nio

回答

2

您可以分割字符串並處理2個字符的長令牌,或者保存一些內存(在這種情況下多餘的16B應該無關緊要,但這是一個很好的做法),並在「原地」執行。 我只會描述我提到的第二種方式。

你需要一個循環遍歷該字符串,每次前進2個字符。每次迭代要將2個字符的數字轉換爲實際的字符,有關如何實現這一點的提示是使用乘法運算符和這些數字使用的數字系統的基數(在本例中爲16)。

您可以存儲每次迭代的結果並在之後打印,或者更方便地在每次迭代時打印它。

+0

+1這將涵蓋OP的問題AFAIKS! (OT:有趣的介紹,不是問題而是答案...) –

0

假設我已經正確地理解了你,我認爲你可以用字符串流很整齊地做到這一點。

std::stringstream stream(argv[1]); 
std::string twochars; 
while (stream >> std::setw(2) >> twochars) { 
    int num; 
    std::stringstream twocharstream(twochars); 
    twocharstream >> std::hex >> num; 
    // Do something with the number here 
} 

您通過一次流兩個字符到字符串twochars開始。然後,您使用hex操縱器將這兩個字符串中的另一個流創建爲一個整數,然後將其轉換爲十六進制數字。

如果你需要用數字表示的字符(即41是字符「A」),那麼你可以簡單地做:

char c = num;