我的电话号码代表为:AA A3 AA A1 A3 A7 A9 A7 A4 A9
,我想将其转换为普通数字:0301379749
?
答案 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;
}