SdFat 将浮点数写入文件 ESP32

SdFat write floats to file ESP32

我需要将浮点数或字符串值写入 SDFAT 库中的 SDVolume 缓存,我正在使用 ESP32 和 SdCard 模块。

  uint8_t* pCache = (uint8_t*)sd.vol()->cacheClear();
  memset(pCache, ' ', 512);
  for (uint16_t i = 0; i < 512; i += 4) {
    
    pCache[i + 0] = 'r'; // I Need to write a Float value or String into this cell
    pCache[i + 1] = ',';
    pCache[i + 2] = '0';
    pCache[i + 3] = '\n';
  }

库 link: https://github.com/greiman/SdFat

第一个:

// I Need to write a Float value or String into this cell

没有意义 - “单元格”是一个字符,如 'e'。如何将完整的浮点值写入单个字符?

您可能只想用浮点数的字符串表示形式填充 pCache。那就这样做吧!

我们已经掌握了所有的 C++,所以让我们使用一种内存效率更高的方法:

std::to_chars 是 C++ 将数值转换为字符串的方法。像

#include <charconv>
…
    std::to_chars(pCache, pCache+512-1, floatvalue);

会合适。

两件事:

  • 如果您需要能够知道字符串的结束位置,则需要零终止 字符串。所以,不是 memset(pCache, ' ', 512),而是 memset(pCache, 0, 512);会更明智。
  • 您确定您使用的功能正确吗? vol()->cacheClear() 非常明确地标记为“请勿在您的应用程序中使用”here!对我来说,您将字符串写入某个块设备缓存而不是从文件系统获取文件缓冲区,或者将缓冲区传递给文件系统以写入文件,这对我来说似乎也很不寻常。