在使用C语言表述一组有特定格式,顺序的数据时,如报文。报文数据,经常会包含不同功能的数据,为了区分顺序和定位数据在报文中的位置,通常我们会采用定义结构体的方式来表示报文,如接收。如果想发送数据时,我们只需要顺序发送,不关心具体位置,此时定义数组较为方便。为了兼顾这两种情况,可以通过合理的使用数组,指针,和结构之间的转换来解决该问题。
#include <stdio.h>
unsigned char a[2] = {0,1};
typedef struct{
unsigned char a[10];
unsigned char b;
unsigned char c;
}str_TypeDef;
str_TypeDef str;
unsigned char *p = (unsigned char *)&str;
unsigned char d[12];
str_TypeDef *pstr = (str_TypeDef *)&d;
void test(void)
{
unsigned char *p = &a;
// *(p+0) = 3;
// printf("*(p+0) = %d\r\n", *p);
// *(p+1) = 4;
// printf("*(p+1) = %d\r\n", *(p+1));
*p = 3;
printf("*(p+0) = %d\r\n", *p);
*(p+1) = 4;
printf("*(p+1) = %d\r\n", *(p+1));
}
int main(int argc, char *argv[])
{
// test();
// printf("a[0] = %d\r\n", a[0]);
// printf("a[1] = %d\r\n", a[1]);
int i = 0;
for(; i<10; i++)
{
str.a[i] = i;
}
str.b = 55;
str.c = 66;
for(i = 0; i<12; i++)
{
printf("*p+%d is: %d\r\n", i, *(p+i));
}
for(i = 0; i<12; i++)
{
d[i] = i;
}
for(i = 0; i<10; i++)
{
printf("pstr->a[%d] = %d \r\n", i, pstr->a[i]);
}
printf("pstr->b = %d \r\n", pstr->b);
printf("pstr->c = %d \r\n", pstr->c);
return 0;
}