可能需要修改的函数:
typedef struct{
uint64_t projectid ;
uint64_t personid;
uint8_t type[10];
uint8_t name[10];
uint32_t weight;
uint32_t hight;
uint32_t vtime;
}QrMiddleType;
uint8_t GStringseparation_u8toqrmiddle(unsigned char *sor,QrMiddleType *msg)
sscanf((const char*)sor,"%d.%d.%d.%d",&Arr[0],&Arr[1],&Arr[2],&Arr[3]);
一开始举例:
104-440-visitor-13213-0-null-440
后面为了压缩二维码修改为:
104-440-0-13213-0-null-440
这个样子 中的"0" "1" "2"来枚举visitor
开始吧:
104-440-0-13213-0-null-440
需要字符串7个 后面可能是8个 我们直接写8个吧!!!
8个成员中最大是U64那就是16+1 吧
所以 char Arr[8][16+1];
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <stdarg.h>
typedef struct{
uint64_t projectid ;
uint64_t personid;
uint8_t type[2];
uint8_t name[10];
uint32_t weight;
uint32_t hight;
uint32_t vtime;
uint32_t valid_time_start;
char Arr[8][16+1];
}QrMiddleType;
uint8_t showqr(QrMiddleType *msg)
{
#define printg printf
printf("############showqrmiddle###############\r\n");
printg("msg->projectid=%lld\r\n",msg->projectid);
printg("msg->personid=%lld\r\n",msg->personid);
printg("msg->type=%s\r\n",msg->type);
printg("msg->name=%s\r\n",msg->name);
printg("msg->weight=%04X\r\n",msg->weight);
printg("msg->hight=%04X\r\n",msg->hight);
printg("msg->vtime=%d\r\n",msg->vtime);
printg("msg->vtime=%d\r\n",msg->valid_time_start);
for(char i=0;i<8;i++)printg("arr[%d]=%s\r\n",i,msg->Arr[i]);
printf("###########################\r\n");
return 1;
}
uint8_t GStringseparation_qrmiddle(unsigned char *sor,QrMiddleType *msg)
{
//先比较是不是7个分隔符 同时狸猫换太子
char lenidex[7] ={0};
uint16_t i=0,j=0;
for(i=0;i<strlen((const char*)sor);i++)
if(sor[i]=='-')
{lenidex[j++]=i;sor[i]=' ';}
if(j!=7){printf("FORM ERR\r\n");return 0;}
sscanf((char*)sor,"%s %s %s %s %s %s %s %s",msg->Arr[0],msg->Arr[1],msg->Arr[2],msg->Arr[3],msg->Arr[4],msg->Arr[5],msg->Arr[6],msg->Arr[7]);
//开始自己转化
msg->projectid=atoi(msg->Arr[0]);
msg->personid=atoi(msg->Arr[1]);
memcpy(msg->type,msg->Arr[2],2);
memcpy(msg->name,msg->Arr[3],10);
if(memcmp(msg->Arr[4],"null",4)!=0) msg->weight=atoi(msg->Arr[4]);
if(memcmp(msg->Arr[5],"null",4)!=0) msg->hight=atoi(msg->Arr[5]);
msg->vtime=atoi(msg->Arr[6]);
msg->valid_time_start=atoi(msg->Arr[7]);
for(i=0;i<7;i++)sor[lenidex[i]]='-';
return 1;
}
int main(void)
{
unsigned char msg[] ={"104-440-0-13213-null-null-440-89"};
QrMiddleType qr={0};
GStringseparation_qrmiddle(msg,&qr);
showqr(&qr);
printf("[%s]",msg);
return 1;
}