在 Arduino 上将数据导入 uint8_t 数组 (C/C++)

Getting data into a uint8_t array (C/C++) on Arduino

我在 Arduino 上的 C/C++ 中工作,但无法将我需要的内容放入 uint8_t 类型的数组中。 C/C++ 不是我熟悉的语言(我是 python / php / 基本的人),所以我正在努力寻找正确的术语/文档那一刻。

基本上,下面是一个示例,并且有效:

static uint8_t mydata[] = "Hello";

稍后我想用其他内容完全替换此内容。

String Temp = "31.0";
String Hum = "60.0";
String Measurements = "";

Measurements = Temp + "C" + Hum + "H";
mydata[0] = ""; //Reset the array contents? Not sure.
uint8_t mydata[] = Measurements;

以上代码示例导致编译器出现以下错误:

error: initializer fails to determine size of 'mydata'
uint8_t mydata[] = Measurements;
        ^~~~~~

error: array must be initialized with a brace-enclosed initializer
uint8_t mydata[] = Measurements;
                   ^~~~~~~~~~~~

initializer fails to determine size of 'mydata'

关于如何处理这个问题有什么建议吗?我看到使用 static uint8_t mydata[] = "Hello"; 的第一个实例不需要声明数据大小。如果我更改为 uint8_t mydata[0] = Measurements; 那么长度警告就会消失,但我会收到一条消息,即数组必须用大括号括起来的初始化程序进行初始化。

对于嵌入式代码,紧凑是关键。像这样使用 user-defined 结构。

struct Temperature{
  uint8_t temp[7];
  uint8_t humi[7];
  Temperature(){temp[0] = humi[0] ='[=10=]';}
  Temperature(uint8_t * t, uint8_t *h){strcpy(temp,t); strcpy(humi,h);}
  void reset(){ temp[0] = humi[0] ='[=10=]';}  
  void setTemp(uint8_t* t){strcpy(temp,t);}
  void setHum(uint8_t* h){strcpy(humi,h);}
  void print(){ char str[16]; sprintf(str,"Temp=%4.2f Hum=%4.2f", atof(temp), atof(humi)); Serial.println(str);}
  void operator=(Temperature other){ strcpy(temp,other.temp); strcpy(humi,other.humi);}
};    

void loop() {
  Temperature temp1;
  temp1.reset();
  temp1.setTemp("52.34");
  temp1.setHum("30");
  Temperature temp2;
  temp2 = temp1;
  temp2.print();
}