昨天在项目中遇到这样一个问题:需要把结构体中的成员一一取出发送。
我想一个一个取出来太死板,就想着能不能用下标的方法去解决。先是问了几个朋友,他们也没有这么做过。于是google。在http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3221128&bbs_page_no=1&search_mode=3&search_text=yulutong&bbs_id=9999的网友lxyppc提出了这样一种处理方法:


1
#define
u8_t 1
2 #define u16_t 2
3 #define u32_t 3
4 #define float_t 4
5 typedef struct {
6 u8 t; // 类型说明
7 union{
8 u8 u8Var;
9 u16 u16Var;
10 u32 u32Var;
11 float fVar;
12 }un;
13 }my_t;
14
15 struct {
16 my_t d1;
17 my_t d2;
18 my_t d3;
19 my_t d4;
20 }sum = {{u8_t},{u16_t},{u32_t},{float_t}};
21
22 void InitMy_t(my_t * p)
23 {
24 switch (p -> t){
25 case u8_t:
26 p -> un.u8Var = 0x12 ; break ;
27 case u16_t:
28 p -> un.u16Var = 0x1234 ; break ;
29 case u32_t:
30 p -> un.u32Var = 0x12345678 ; break ;
31 case float_t:
32 p -> un.fVar = 12.3456 ; break ;
33 default :
34 break ;
35 }
36 }
37
38 for (my_t * p = & sum.d1; p <=& sum.d4; p ++ ){
39 InitMy_t(p);
40 }
41
2 #define u16_t 2
3 #define u32_t 3
4 #define float_t 4
5 typedef struct {
6 u8 t; // 类型说明
7 union{
8 u8 u8Var;
9 u16 u16Var;
10 u32 u32Var;
11 float fVar;
12 }un;
13 }my_t;
14
15 struct {
16 my_t d1;
17 my_t d2;
18 my_t d3;
19 my_t d4;
20 }sum = {{u8_t},{u16_t},{u32_t},{float_t}};
21
22 void InitMy_t(my_t * p)
23 {
24 switch (p -> t){
25 case u8_t:
26 p -> un.u8Var = 0x12 ; break ;
27 case u16_t:
28 p -> un.u16Var = 0x1234 ; break ;
29 case u32_t:
30 p -> un.u32Var = 0x12345678 ; break ;
31 case float_t:
32 p -> un.fVar = 12.3456 ; break ;
33 default :
34 break ;
35 }
36 }
37
38 for (my_t * p = & sum.d1; p <=& sum.d4; p ++ ){
39 InitMy_t(p);
40 }
41
我大概看了下,这样处理还是很巧妙的。但是我的结构体中成员不是很多,所以也就没有采用下标访问。不过也许将来会用到这种方法。先保存着吧.