typedef struct MsgData
{
char type;
int len;
char msg[8];
}MSG;
void main(void)
{
MSG buf;
buf.type = '1';
buf.len = 6;
memset(buf.msg, 0, sizeof(buf.msg));
*(buf.msg) = 'h';
*(buf.msg + 1) = 'e';
*(buf.msg + 2) = 'l';
*(buf.msg + 3) = 'l';
*(buf.msg + 4) = 'o';
*(buf.msg + 5) = '!';
char *a = (char*)&buf;
MSG *b = (MSG*)a;
}
只看最后两行,倒数第二行实现的是将MSG的结构体强制转换成字符串,储存在a指向的内存中,倒数第一行实现的是将a强制转换成MSG型,储存在b指向的内存中。看编译结果:
可以看到,a乱码无法显示,原因是MSG中含有int型,强制赋值给char型出现乱码,但b可以正常显示,由此可知,将结构体将之类型转换后保存在char型变量中,虽然无法显示,但仍可解析,提供一种结构体的储存方式。