结构体转为字符串数组

        在工作中需要进行发送一包数据,而且数据的格式各不一样,只能定义为结构体的形式,但是发送方式以字符串的形式进行发送,这样就需要将结构体类型的变量转换为字符串数组。下面只是,自己定义的结构体进行的转换,其他的形式都是一样的。在合并的时候一定要注意前面数组的长度一定要在包含后面数组长度之后大于。要不然合并之后就越界了,结果如何,可以自己试验,特别是自己的项目中。

#include <stdio.h>

#include <string.h>
struct data   //定义结构体
{
short cmd;
int len;
char data[200];
int crc;
};
char SendBuff[300]={0};  //发送数据的缓冲区
void change (char array[],int num) //int整型转换为字符数组
{
int a=num;
int i=0;
for(i=0;i<4;i++)
{
array[i]=*((char*)&a+i);
}
}
void conversion(struct data str)   //将结构体转为字符串
{
char person[6]; //定义的只是中间暂时缓冲区,就是存储int型转为字符
SendBuff[0]=(char)str.cmd;
SendBuff[1]=(char)str.cmd>>8; //这个是利用小端模式进行
change (person,str.len);
strcat(SendBuff,person); //利用字符串合并函数,将部分字符转换合并
memset(person, 0, 6);   //清空暂时缓冲区,以备后面使用,以防脏数据
strcat(SendBuff,str.data);
change (person,str.crc);
strcat(SendBuff,person); //最后就是合并成功,将结构体中的数据转换为字符串形式保存在发送缓冲区中
}
int main()
{
struct data str; //定义一个变量
str.cmd=180;
strcpy(str.data,"hello,iloveyou");   //给结构体数组赋值,需要进行拷贝不能直接用‘=’赋值
str.len=strlen(str.data);   //计算长度
str.crc=12345;
conversion(str); //传送结构体变量
printf("%s,%x,%x",SendBuff,SendBuff[0],SendBuff[1]);


猜你喜欢

转载自blog.csdn.net/qq_21815001/article/details/80418853