while(i < length)
{
pow = 1;
for(int j = 0; j < 8; j++, pow *=2)
{
ch += (str[j] - 48) * pow;
}
str = str.substr(8);
i+=8;
cout << ch;
ch = 0;
}
这似乎大大减慢了我的程序速度。是因为我在那里使用的字符串函数,还是这种方法通常是错误的。我知道有一种方法可以实现长除法,但我想看看这是否真的比这种方法更有效。我想不出另一种不使用相同通用算法的方法,所以也许这只是我的实现问题。
最佳答案
也许您想研究使用标准库函数。它们可能至少与您通过编译器运行的任何东西一样优化:
#include <iostream>
#include <iomanip>
#include <cstdlib>
int main (void) {
const char *str = "10100101";
// Use str.c_str() if it's a real C++ string.
long int li = std::strtol (str, 0, 2);
std::cout
<< "binary string = " << str
<< ", decimal = " << li
<< ", hex = " << std::setbase (16) << li
<< '\n';
return 0;
}
输出是:
binary string = 10100101, decimal = 165, hex = a5
关于c++ - 这是将二进制字符串转换为十进制值的低效方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11716508/