| 
 
 6700| 2
 
 | 
[入门] 共用体(union)学习笔记 | 
| 
 本帖最后由 LALALA 于 2019-7-31 22:16 编辑  最近做“课题”要用EEPROM,单是EEPROM还好,但是对EEPROM操作只能存入字节(byte)型的变量,但是我需要的是整数(int)型变量,发现大家一般用共用体把一个int分成两个byte存储,但是union是个什么玩应,杜洋老师也没讲过啊?我查了各种帖子、博客,再加上自己瞎鸡儿乱试,终于搞明白了,在这记录一下,也算是分享了,有不足的地方,欢迎大家批评指正。 说,共用体还有一兄弟叫结构(struct),哥俩的区别在于共用体是几个变量共用一块存储空间,因而可以用于实现拆分数据的功能。 定义共用体 1.  union test                //定义test联合体     2.  {      3.    int office;             //整型成员office     4.    byte teacher[2];        //字节数组成员teacher     5.  }a,b;                     //定义同时说明a,b为test类型     6.                        //a,b变量的长度应等于test的成员中最长的长度,     7.                        //即等于teacher数组的长度,共2个字节。   要表示共用体可以用 1.  a.office     2.  a.teacher[0]   3.  a.teacher[1]   如上,a.teacher[0]和a.teacher[1]其实就是拆分后的a.office 如果我们让 1.  a.office = 0xff00;      //即1111 1111 0000 0000     则 1.  a.teacher[0] == 0000 0000     2.  a.teacher[1] == 1111 1111    1.  #include <EEPROM.h>   2.     3.  union data    4.  {   5.    int a;   6.    byte b[2];   7.  } distance;   8.     9.  void setup()    10. {   11.   Serial.begin(9600);   12.    13.   //清空数据(每个地址都写0)   14.   for (int i = 0; i < 512; i++)   15.   {   16.      EEPROM.write(i, 0);     17.   }   18.      19.   //数据拆分   20.   distance.a = 32000;   21.   for(int i = 0; i < 2; i++)    22.   {   23.     EEPROM.write(i,distance.b);   24.   }   25.    26. }   27.    28. void loop()   29. {   30.   //数据还原   31.   for(int i = 0; i < 2; i++)   32.   {   33.     distance.b = EEPROM.read(i);   34.   }   35.   Serial.println(distance.a);   36.   delay(1000);   37. }    | 
 沪公网安备31011502402448© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed