Codekata将数字从十六进制转换为十进制整数表示形式
Codekata to convert number from hex to dec integer representation
我正在编写一个小程序来转换字符串的十六进制表示,这是一个提高我技能的卡塔。
这就是我提出的
std::vector<int> decimal( std::string const & s )
{
auto getint = [](char const k){
switch(k){
case 'f':
return 15;
case 'e':
return 14;
case 'd':
return 13;
case 'c':
return 12;
case 'b':
return 11;
case 'a':
return 10;
case '9':
return 9;
case '8':
return 8;
case '7':
return 7;
case '6':
return 6;
case '5':
return 5;
case '4':
return 4;
case '3':
return 3;
case '2':
return 2;
case '1':
return 1;
case '0':
return 0;
};
std::vector<int> result;
for( auto const & k : s )
{
result.push_back(getint(k));
}
return result;
}
我想知道是否还有其他方法可以做到这一点。我也考虑过使用一些东西作为std::map,但我不确定哪一个可能更快。如果有其他方法可以做到这一点,请添加它。
请记住,我这样做是为了提高我的技能和学习。
感谢TIA!
首先,您可能可以简化您的逻辑,如下所示:
auto getint = [](char const k){
if(k >= 'a' && k <= 'f') return (k - 'a');
else if(k >= 'A' && k <= 'F') return (k - 'A');
else if(k >= '0' && k <= '9') return (k - '0');
else return -1;
}
除此之外,可能还有一个标准库函数可以做到这一点,根据您的具体需求,您可能更喜欢它。
对于十进制数字,很容易将字符转换为其数字,因为C++规范规定所有编码中的所有数字都必须连续,'0'
最低,'9'
最高。这意味着您可以通过减去'0'
将字符转换为数字,例如k - '0'
。虽然对字母没有这样的要求,但最常见的编码(ASCII)也是如此,但如果你想便携,就不应该指望它。
您也可以使用例如std::transform
和std::back_inserter
来完成,因此不需要自己的循环。也许类似
std::transform(std::begin(s), std::end(s), std::back_inserter(result), getint);
在getint
函数中,您可以使用例如std::isxdigit
和std::isdigit
来分别检查字符是有效的十六进制数字还是十进制数字。如果十六进制数字是大写,您可能应该使用例如std::tolower
。
您可以使用strtol或strtoll来完成从base16字符串转换为整数值的大部分繁重工作。
然后使用字符串流对象将其转换回常规字符串。
// parse hex string with strtol
long value = ::strtol(s.c_str(), nullptr, 16); //not shown - checking for errors. Read the manual page for more info
// convert value back to base-10 string
std::stringstream st;
st << value;
std::string result = st.str();
return result;
相关文章:
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 如何计算整数的十进制数字?
- 如何在C++中将一个值拆分为一个十进制整数
- 我可以将指针地址(即十六进制整数)转换为C 中的十进制和八分位基础
- 计算整数的十进制表示形式的不同位数
- 正十进制整数的递归函数位数,按c++的相反顺序排列
- C++ 一种方法,该方法将十进制值作为用布尔数组表示的二进制的整数返回
- C++ 将十进制字符串拆分为两个整数
- 以十进制、八进制和十六进制表示法标识整数文本是否与转义字符中的整数文本相同
- C++ 十进制到十六进制(整数到字符)
- Codekata将数字从十六进制转换为十进制整数表示形式
- 作为整数发送 3 的函数接收 51,即 "3" 个字符的十进制值
- 字符串流十进制整数输入到 8 位类型
- 十进制到二进制转换器(整数1-8)
- c++将十六进制md5哈希值转换为十进制整数
- 将十进制美元金额从字符串转换为缩放后的整数
- 将矢量的位转换为十进制整数
- 将具有十进制值的矢量字符串转换为整数
- 将二进制编码的十进制(BCD)解码为无符号整数