3328| 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. } |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed