sscanf小试牛刀-解析二维码修改函数

可能需要修改的函数:
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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值