【问题标题】:convert strange hex phone number to normal digits将奇怪的十六进制电话号码转换为普通数字
【发布时间】:2011-08-13 16:33:15
【问题描述】:

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

【问题讨论】:

  • AA(16) = A(16) * 16(10) + A(16) = 10(10) * 16(10) + 10(10) = 170(10) 以此类推.
  • 号码是否保存在内存中?如果是这样,怎么做?它是一个字符数组/指针吗?还是你把它保存在一个文件中?还是你应该在提示符中输入数字?

标签: c++ c++11 hex


【解决方案1】:
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;
}

【讨论】:

  • 这正是我想要的
【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2016-01-01
    • 2013-12-08
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2016-01-17
    • 2022-01-18
    相关资源
    最近更新 更多