将奇怪的十六进制电话号码转换为正常数字
convert strange hex phone number to normal digits
我有一个表示为: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;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- 2命令行参数中的数字数字仅被视为一个数字
- 如何验证输入仅是数字数字
- C++不会根据需要将数字/数字插入向量
- 数字/数字识别手写
- 从字符串中提取数字/数字范围的复杂算法
- 数字数字的排列