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!对我来说,您将字符串写入某个块设备缓存而不是从文件系统获取文件缓冲区,或者将缓冲区传递给文件系统以写入文件,这对我来说似乎也很不寻常。
我需要将浮点数或字符串值写入 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!对我来说,您将字符串写入某个块设备缓存而不是从文件系统获取文件缓冲区,或者将缓冲区传递给文件系统以写入文件,这对我来说似乎也很不寻常。