将奇怪的十六进制电话号码转换为正常数字

convert strange hex phone number to normal digits

本文关键字:常数字 数字 转换 十六进制 电话号码      更新时间:2023-10-16

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

int main()
{
    std::string str = "xAAxA3xAAxA1xA3xA7xA9xA7xA4xA9";
    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;
}

您的数字似乎被0xA0偏移,数字'0'表示为10而不是0 (0xA0 + 10 = 0xAA)。

因此,对于每一个数字,减去0xA0,然后对10取模:

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

借用@hidayat的一些代码,这里有一个如何转换的示例:

int main()
{
    std::string str = "xAAxA3xAAxA1xA3xA7xA9xA7xA4xA9";
    std::for_each(str.begin(), str.end(), [](char &c)
    {
        c = '0' + (c - 0xA0) % 10;
    });
    cout << str << endl;
    return 0;
}