1. 程式人生 > >結構體轉為字串陣列

結構體轉為字串陣列

        在工作中需要進行傳送一包資料,而且資料的格式各不一樣,只能定義為結構體的形式,但是傳送方式以字串的形式進行傳送,這樣就需要將結構體型別的變數轉換為字串陣列。下面只是,自己定義的結構體進行的轉換,其他的形式都是一樣的。在合併的時候一定要注意前面陣列的長度一定要在包含後面陣列長度之後大於。要不然合併之後就越界了,結果如何,可以自己試驗,特別是自己的專案中。

#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]);