共用体(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; //字节数组成员teacher 5.}a,b; //定义同时说明a,b为test类型 6. //a,b变量的长度应等于test的成员中最长的长度, 7. //即等于teacher数组的长度,共2个字节。
要表示共用体可以用1.a.office 2.a.teacher3.a.teacher
如上,a.teacher和a.teacher其实就是拆分后的a.office
如果我们让1.a.office = 0xff00; //即1111 1111 0000 0000
则1.a.teacher == 0000 0000 2.a.teacher == 1111 1111
这样就实现了拆分数据的目的
至于复原数据,就是这个操作的反过程
完整代码如下(适用于Arduino)
1.#include <EEPROM.h>2. 3.union data 4.{5. int a;6. byte b;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. }
很好的分享 这。。。。自己搞的代码块翻车了。。。。
代码也可以在这里查看/下载
https://gitee.com/TobbyLALALA/study/tree/master
页:
[1]