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 字符串。
- 在为 Arduino 编程时,宁愿忘记字符串和向量,使用 C 字符串和 C 数组,因为它的资源非常有限。
- 处理整数时切勿使用浮点数和浮点函数。
unsigned long long convert(const char *str)
{
unsigned long long result = 0;
while(*str)
{
result <<= 1;
result += *str++ == '1' ? 1 : 0;
}
return result;
}
我想在 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 字符串。
- 在为 Arduino 编程时,宁愿忘记字符串和向量,使用 C 字符串和 C 数组,因为它的资源非常有限。
- 处理整数时切勿使用浮点数和浮点函数。
unsigned long long convert(const char *str)
{
unsigned long long result = 0;
while(*str)
{
result <<= 1;
result += *str++ == '1' ? 1 : 0;
}
return result;
}