在Arduino上将数据获取到uint8_t数组C / C ++

问题描述

我在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;,则长度警告消失了,但是我得到的消息是,必须使用大括号括起来的初始化程序来初始化数组。

解决方法

对于嵌入式代码,紧凑性是关键。像这样使用用户定义的结构。

struct Temperature{
  uint8_t temp[7];
  uint8_t humi[7];
  Temperature(){temp[0] = humi[0] ='\0';}
  Temperature(uint8_t * t,uint8_t *h){strcpy(temp,t); strcpy(humi,h);}
  void reset(){ temp[0] = humi[0] ='\0';}  
  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();
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...