题目:封装一个用于payload传出的结构体,参考 typedef struct{ uint8_t header55; uint8_t headeraa; uint8_t cmd; uint8_t cs; uint8_t length; uint8_t payload[0]; } attribute ((packed)) sPacketHeader_t;
申请一段内存,结构体指针为其赋值,计算cs 将这个包模拟传输到另一个设备(函数代替),还原成结构体 计算这个结构体的cs,看和包内的cs是否一致? 下面给出的示例代码有问题。可是应该怎样修改呢?不是很会啊!
#include<stdio.h> #include<string.h> typedef unsigned char uint8_t; typedef unsigned char uinte32_t; #define GET_NAME 1 void data_transminssion(void *buf); uint8_t get_cs(sPacketHeader_t *p); typedef struct{ uint8_t header55; uint8_t headeraa; uint8_t cmd; uint8_t cs; uint8_t length; uint8_t payload[0]; } __attribute__ ((packed)) sPacketHeader_t; } void data_transminssion(void *buf) { sPacketHeader_t *p; uint8_t0 *p_cs = (uint8_t *)buf; if(p_cs != 0x55) { p_cs++; } sPacketHeader_t packed; packed.headeraa = p_cs[2]; packed.cmd = p_cs[3]; packed.cs = p_cs[4]; packed.length = p_cs[5]; } uint8_t get_cs(sPacketHeader_t *p) { uint8_t cs = 0; for(int i = 0; i < p->length; i++){ cs = cs + payload[i]; } } int main() { sPacketHeader_t *p; p =(sPacketHeader_t *) malloc(sizeof(sPacketHeader_t) + 5); strcpy(payload, "abcde"); p->header55 = 0x55; p->headeraa = 0xaa; p->cmd = GET_NAME; length = strlen(payload); p->cs = get_cs(p); printf("cs = s%d\n", p->cs); data_transminssion(void *buf); return 0; }