.h
void hello();
typedef short int uint8_t;
typedef unsigned char uint16_t;
typedef unsigned int uint32_t;
typedef struct Payload {
uint8_t *data;
int len;
} Payload;
typedef struct Header {
int srcId;
int desId;
} Header;
typedef struct Packet{
Header *header;
Payload *payload;
}Packet;
typedef struct Link{
uint8_t *data;
int len;
}Link;
Header *initHeader();
Payload *initPayload() ;
Packet *initPacket2();
Packet *initPacket(Header *h,Payload *p);
void releasePacket(Packet *packet);
void release(Payload *p);
void showPayload(Payload *p) ;
void showLinkData(char *link,int len) ;
void packetData(Packet *packet);
.c
/*====h.c=======*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "hello.h"
void hello()
{
printf("Hello,world!.\n");
}
Header *initHeader(){
Header *header = (Header *)malloc(sizeof(Header));
return header;
}
Payload *initPayload() {
//初始化结构体指针
Payload *payload = (Payload *) malloc(sizeof(Payload));
//初始化uint8_t指针
payload->data = (uint8_t *) malloc(1024*sizeof(uint8_t));
//设置默认值
memset(payload->data, 0, 1024);
payload->len=1024;
return payload;
}
Packet *initPacket2(){
Packet *packet = (Packet *)malloc(sizeof(Packet));
packet->header = initHeader();
packet->payload = initPayload();
}
Packet *initPacket(Header *h,Payload *p){
Packet *packet = (Packet *)malloc(sizeof(Packet));
packet->header = h;
packet->payload = p;
return packet;
}
void releasePacket(Packet *packet){
if(packet->header!=NULL){
free(packet->header);
}
if(packet->payload!=NULL){
free(packet->payload);
}
free(packet);
}
void release(Payload *p){
free(p->data);
free(p);
}
void showPayload(Payload *p) {
int len = p->len;
int i;
printf("showPayload={");
for(i=0;i<len;i++){
printf("%d ",p->data[i]);
}
printf("}\n");
}
void showLinkData(char *link,int len) {
int i;
printf("Packet=[");
int x =0;
int k=0;
for(i=0;i<len;i++){
int d = *(link+i);
x =(d<<8*i)|x;
k++;
printf("{%d %d} ",d,x);
if(k==4){
k=0;
x=0;
printf("\n");
}
}
printf("]\n");
}
void packetData(Packet *packet){
int len = sizeof(Header);
int count =0;
char *buffer=(char*)malloc(len);
memcpy(buffer,packet->header,len);
printf("header len =%d\n",len);
count+=len;
int payloadlen =packet->payload->len*sizeof(uint8_t);
memcpy(buffer+len,packet->payload->data,payloadlen);
count+=payloadlen;
printf("count =%d\n",count);
int i;
printf("---------------------\n");
showLinkData(buffer,count);
printf("---------------------\n");
printf("\n");
buffer=NULL;
}
/*=====main.c=======*/
#include <stdio.h>
#include <stdlib.h>
# include <string.h>
#include "hello.h"
int main()
{
hello();
uint8_t data[6] = {1,2,3,4,5,6};
//Next
printf("----Next-Packet----size=%d datasize=%d\n",sizeof(Packet),sizeof(data));
Packet *packet2 = initPacket2();
packet2->header->srcId =30;
packet2->header->desId=90;
//将数据拷贝到payload中
memcpy(packet2->payload->data,data,sizeof(data));
//获取数组长度
packet2->payload->len =sizeof(data)/sizeof(uint8_t);
showPayload(packet2->payload);
///
printf("\n");
//
packetData(packet2);
//
releasePacket(packet2);
printf("main end\n");
return 0;
}
4.gcc
gcc main.c hello.c -o luancher
./luancher