Arduino C/C++ 将二进制字符串转换为十进制

Arduino C/C++ Convert binary string to decimal

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

下面的代码应该是 return "888888" 但 return 是 "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;
}

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

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 字符串。

  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;
}