如何在迭代中使用 Preferences.h 库?

How do I use Preferences.h library in iteration?

我在使用 Arduino IDE 的项目中使用 ESP32 WROOM 32D 模块。我想在它提供的 Preferences.h 库的帮助下使用 NVS 设施,尽管可以通过用户获得的数据将存储在不同的名称空间中,并且可以在以后使用。我可以轻松地创建简单的一两个命名空间,但为此我需要使用迭代。我一直在为此挠头,但没有运气。我在 GitHub 上看到一个人抱怨说它可能对迭代不友好。这是我的代码:

#include<Preferences.h>

Preferences ok;
String data1;
byte data2[2];byte data3[9];
byte buff[2];byte buf[9];
bool data4;

void setup() {
  Serial.begin(115200);
  
  for(int i=2; i<280; i++){
    char testarray[]="test1";
    testarray[4]=i;
    ok.begin(testarray,false);
    char datad1[20]="Code 15 launched 20";
    datad1[15]=i;
    ok.putString("data1", datad1);
    ok.putBytes("data2","2",2);
    ok.putBytes("data3","DF1BE29C",9);
    ok.putBool("data4", true);
    ok.end();
  }
  for(int i=2; i<280; i++){
    char testarray[]="test1";
    testarray[4]=i;
    ok.begin(testarray,false);
    data1=ok.getString("data1");
    Serial.println(data1);
    data2[2]=ok.getBytes("data2",buff,2);
    Serial.print(data2[1], HEX);
    Serial.print(data2[2], HEX);
    Serial.println();
    data3[9]=ok.getBytes("data3",buf,9);
    for (int j = 0; j < sizeof(data3); j++) {
        Serial.print(data3[j], HEX);
    }
    Serial.println();
    data4=ok.getBool("data4");
    Serial.println(data4);
    ok.end();
  }
}

void loop() {
  
}

这有什么问题吗?格式只是 const char* 作为命名空间名称的参数,我只是希望这样可以有效地创建 test1、test2、test3、test4 命名空间....但似乎不太可行。任何指导将不胜感激。

你不能像那样构造 C 字符串:

    char testarray[]="test1";
    testarray[4]=i;
...
    char datad1[20]="Code 15 launched 20";
    datad1[15]=i;

这只是用数值 2、3、.. 280 替换字符“1”。数字不是字符。

这是用数字构造 C 字符串的方法:

char label[8]; // 4 chars for "test", 3 chars for 3 digit number, 1 char for NULL
snprintf(label, sizeof(label), "test%d", i);