将奇怪的六角电话号码转换为普通数字

时间:2011-04-27 09:09:16

标签: c++ c++11 hex

我的电话号码代表为:AA A3 AA A1 A3 A7 A9 A7 A4 A9,我想将其转换为普通数字:0301379749

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
}