C 重新学习

.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值