将 char A[] 转换为 double

convert char A[] to double

我有一个 arduino 代码,它以 char 数据类型输入音量,我想将它转换为双精度,我试过使用 atof,但它不起作用。我的代码有什么问题。对不起这里的新手!!

double v;
int data_count = 0;
int i;
char Data[16];
char volume[16];
char inputTime[16];

// Define the Keymap for Keypad
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'.', '0', '#', 'D'}
};
lcd.setCursor(0, 0);
  lcd.print("Input Volume:");

  if (customKey != NO_KEY && customKey != '#'
      && customKey != 'A' && customKey != 'B' && customKey != 'C'
      && customKey != 'D') {
    Data[data_count] = customKey;
    lcd.setCursor(data_count, 1);
    lcd.print(Data[data_count]);
    data_count++;
  }

  if (customKey == '#') {
    volumelength = data_count;
    for (i = 0; i < volumelength; i++) {
      volume[i] = Data[i];          
    }
    clearData();
    nextstate();
    data_count = 0;
    v = atof(volume);
  }

在 arduino 语言中有 toFloat() ( https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/tofloat/ )

else atof() 应该像在 avr-gcc stdlib.h 8 位 AVR CPU 库中一样工作阿杜伊诺

( https://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html ) :

#include <stdlib.h>

char s[] = "11.248"
double f = 0;

f=atof(s);

另见 http://www.ethernut.de/nutwiki/index.php/Converting_Strings_to_Floating_Point_Values(ethernut 用于 8 位 CPUs)

可能会检查 Data 的内容是否真的是一个浮点数...

avr-gcc/arduino 中的另一个 atof 示例:https://forum.arduino.cc/index.php?topic=98595.0