c++ - 这是将二进制字符串转换为十进制值的低效方法吗?

标签 c++ binary decimal

  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/

相关文章:

python - 如何在Python中提升Decimal模块

c++ - 显式调用括号前的表达式必须具有(指向)函数类型

c - 在 c 中为浮点变量生成整数输出

c++ - boost::graph 中的 DFS 更改图形内容

javascript - 无效数据 : Missing delimiter ":" [0x3a] nodejs

c - 十六进制字符串转二进制字符串

python - 将二进制转换为十六进制等。没有功能。?

c# - 将 .NET 小数存储到 MySQL 中的最佳字段定义是什么?

c++ - 尝试使用 magick++ 在 c++ 中删除背景并使其透明

c++ - 以行和列的形式访问 vector<vector<char>> 元素