在 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();
}
我在 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();
}