【问题标题】:Arduino C/C++ Convert binary string to decimalArduino C/C++ 将二进制字符串转换为十进制
【发布时间】:2021-02-05 08:52:42
【问题描述】:

我想在 Arduino 论坛上发布此内容,但找不到任何“新帖子”按钮...
无论如何,我编写了这个函数来将二进制字符串转换为 int/long。
但是,它并不总是适用于大数字。

以下代码应该返回“888888”,但返回“888.887”

void setup() {
  Serial.begin(9600);
  String data = "11011001000000111000"; //888888
  Serial.print(binStringToInt(data));
}

unsigned long binStringToInt(String bin) {
  unsigned long total = 0;
  int binIndex = 0;
  for (int i = bin.length() - 1; i > - 1; i--) {
    total += round(pow(2, binIndex)) * (bin.charAt(i) - '0');
    binIndex++;
  }
  return total;
}

【问题讨论】:

  • pow 通常返回一个浮动类型。您是否尝试过其他方法,例如按位移位?
  • 不要使用pow(2, binIndex)。请改用1 << binIndex
  • 常见误解:StackExchange 站点不是经典论坛。它们是问答网站。您发布了一个“新问题”,但您需要有一个帐户。

标签: c++ c arduino


【解决方案1】:

您可以使用更简单的函数来实现:

long binary_to_int(char *binary_string){
    long total = 0;
    while (*binary_string)
    {
     total *= 2;
     if (*binary_string++ == '1') total += 1;
    }
    
    return total;
}

void setup(){
    Serial.begin(9600);
    String data = "11011001000000111000";
    Serial.print(binary_to_int(data.c_str())); // prints 888888
}

我使用.c_str()char * 用于 Arduino 字符串。

【讨论】:

    【解决方案2】:
    1. 在对 Arduino 进行编程时,宁愿忘记字符串和向量,使用 C 字符串和 C 数组,因为它的资源非常有限。
    2. 在处理整数时切勿使用浮点数和浮点函数。
    unsigned long long convert(const char *str)
    {
        unsigned long long result = 0;
    
        while(*str)
        {
            result <<= 1;
            result += *str++ == '1' ? 1 : 0;
        }
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-23
      • 2014-08-03
      • 2020-01-04
      • 2016-06-02
      • 1970-01-01
      • 2017-03-03
      • 2012-02-05
      相关资源
      最近更新 更多