字符串转换问题

南瓜饼 2013-05-27 04:12:17
str2="01 00 20 00 01 10 30 31 32 33 34 35 36 37 38 FF FF FF FF FF FF FF";
unsigned char source[22]={0x00,0x20,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};

怎么把上面的字符串转换成下面的这个数组
...全文
64 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
南瓜饼 2013-05-27
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
char *str2="01 00 20 00 01 10 30 31 32 33 34 35 36 37 38 FF FF FF FF FF FF FF";
unsigned char source[22];
int i;
int v;
for (i=0;i<22;i++) {
    sscanf(str2+3+i*3,"%2x",&v);
    source[i]=(unsigned char)v;
}
赵老师给的最简单 最容易理解 谢啦 结贴
Red_angelX 2013-05-27
  • 打赏
  • 举报
回复
sscanf
starytx 2013-05-27
  • 打赏
  • 举报
回复
代码贴的有误,看这个吧
   char str2[] ="01 00 20 00 01 10 30 31 32 33 34 35 36 37 38 FF FF FF FF FF FF FF"; 
   BYTE source[22] ={0};
   for (int i = 0 ,j = 0; i < strlen(str2); i += 3, j++)
   {

       if (str2[i] >= '0' && str2[i] <= '9')
       {
           source[j]+= (str2[i] - '0')*16;
       }
       else if ((str2[i] >= 'a' && str2[i] <= 'z'))
       {
           source[j]+= (str2[i] - 'a' + 10)*16;
       }
       else
       {
           source[j]+= (str2[i] - 'A' + 10)*16;
       }

       if (str2[i+1] >= '0' && str2[i+1] <= '9')
       {
           source[j]+= (str2[i+1] - '0');
       }
       else if ((str2[i+1] >= 'a' && str2[i+1] <= 'z'))
       {
           source[j]+= (str2[i+1] - 'a' + 10);
       }
       else
       {
           source[j]+= (str2[i+1] - 'A' + 10);
       }
   }

   // 打印出来对比一下看看
   printf("%s\n" ,str2);
   for (int i = 0; i != 22; ++i)
   {
       printf("%02X " ,source[i]);
   }
   printf("\n");
赵4老师 2013-05-27
  • 打赏
  • 举报
回复
char *str2="01 00 20 00 01 10 30 31 32 33 34 35 36 37 38 FF FF FF FF FF FF FF";
unsigned char source[22];
int i;
int v;
for (i=0;i<22;i++) {
    sscanf(str2+3+i*3,"%2x",&v);
    source[i]=(unsigned char)v;
}
starytx 2013-05-27
  • 打赏
  • 举报
回复
没看明白结果和源串的对应关系。如果是简单对应的话就循环,每次取两个字符,每次跳3个字符取下一个,然后对于取到的两个字符,再进行处理,代码示例:
   char str2[] ="01 00 20 00 01 10 30 31 32 33 34 35 36 37 38 FF FF FF FF FF FF FF"; 
   BYTE source[22] ={0};
   for (int i = 0 ,j = 0; i < strlen(str2); i += 3, j++)
   {

       if (str2[i] >= '0' && str2[i] <= '9')
       {
           source[j]+= (str2[i] - '0')*16;
       }
       else if ((str2[i] >= 'a' && str2[i] <= 'z'))
       {
           source[j]+= (str2[i] - 'a' + 10)*16;
       }
       else
       {
           source[j]+= (str2[i] - 'A' + 10)*16;
       }

       if (str2[i] >= '0' && str2[i] <= '9')
       {
           source[j]+= (str2[i] - '0');
       }
       else if ((str2[i] >= 'a' && str2[i] <= 'z'))
       {
           source[j]+= (str2[i] - 'a' + 10);
       }
       else
       {
           source[j]+= (str2[i] - 'A' + 10);
       }
   }

   // 打印出来看看
   for (int i = 0; i != 22; ++i)
   {
       printf("%02X " ,source[i]);
   }
   printf("\n");

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧