2011-04-27 78 views
1

我有一個電話號碼錶示爲:AA A3 AA A1 A3 A7 A9 A7 A4 A9,我想將它轉換爲正常數字:0301379749將奇怪的十六進制電話號碼轉換爲正常數字

+0

AA(16) = A(16)* 16(10)+ A(16)= 10(10)* 16(10)+10(10)= 170(10)等等。 – 2011-04-27 09:11:39

+0

數字是否保存在內存中?如果是這樣,怎麼樣?它是一個char數組/指針嗎?或者你把它保存在一個文件中?或者你應該在提示中輸入數字? – rzetterberg 2011-04-27 09:12:58

回答

4
int main() 
{ 
    std::string str = "\xAA\xA3\xAA\xA1\xA3\xA7\xA9\xA7\xA4\xA9"; 

    for(unsigned i = 0; i < str.size(); i++) 
    { 
     if(str[i] == '\xAA') str[i] = '\x00'; 
     str[i] = (str[i]&'\x0F') + '0'; 
    } 

    //or 
    std::for_each(str.begin(), str.end(), [](char &c) 
    { 
     if(c == '\xAA') c = '\x00'; 
     c = (c&'\x0F') + '0'; 
    }); 

    cout << str << endl; 

    return 0; 
} 
+0

這正是我所期待的 – Merni 2011-04-27 09:15:26

2

您的數字似乎被0xA0偏移,數字「0」表示爲10而不是0(0xA0 + 10 = 0xAA)。

因此,對於每個數字,減去0XA0,再取模10:

const unsigned int digit = (weirdHexValue - 0xA0) % 10; 

中借鑑@hidayat一些代碼,下面是如何轉換的例子:

int main() 
{ 
    std::string str = "\xAA\xA3\xAA\xA1\xA3\xA7\xA9\xA7\xA4\xA9"; 

    std::for_each(str.begin(), str.end(), [](char &c) 
    { 
     c = '0' + (c - 0xA0) % 10; 
    }); 

    cout << str << endl; 

    return 0; 
} 
相關問題