• C++开发中BYTE类型数组转为对应的字符串


    下午密码键盘返回了一个校验码,是BYTE类型数组,给上层应用返回最好是字符串方式,怎样原样的将BYTE数组转为string串呢?不多说,开动脑筋上手干!!!

    BYTE格式的数组bt{08,D7,B4,FB},如何转换为字符串样式 (str = "08 D7 B4 FB") 呢?

    其实在BYTE数组中存放的值是bt{8,215,180,251}这样,下面开始转字符串。

    1、先对数组元素进行除数为16的取余和取模(这样215就会变成13和7,是不是看到16进制的值了呀)
            商v                  模m
    取bt[0],bt[0]/16=0,bt[0]%16=8
    取bt[1],bt[1]/16=13,bt[0]%16=7
    取bt[2],bt[2]/16=11,bt[0]%16=4
    取bt[3],bt[3]/16=15,bt[0]%16=11

    2、数值转ASCII

      16进制的第一位

       判断v>=0&&v<=9,则v+=48   //数字转换
          else v>=97&&v<=122 则v+87   //小写字母转换
       else v+55    //大写字母转换

      16进制第二位
      判断m>=0&&m<=9,则m+=48 //数字转换
      else m>=97&&m<=122 则m+87 //小写字母转换
      else m+55 //大写字母转换

    3、将对应的char(v)+char(m)合并为一个字符串即可

    代码
    1、循环执行取余和取模
      int v = (*(lpxKVC->lpbData+i))/16;
      int m = (*(lpxKVC->lpbData+i))%(16);
      执行完成
      v=0,m=8
      v=13,m=7
      v=11,m=4
      v=15,m=11
    2、将得到的v和m转换为对应的ASCII码
      if(v>=0&&v<=9) {v+=48;}
      else if( v>=97&&v<=122) {v=v+87;}
      else {v=v+55;}
      if(m>=0&&m<=9) {m+=48;}
      else if( m>=97&&m<=122) {m=m+87;}
      else {m=m+55;}
      执行完成
      v=48,m=56
      v=68,m=55
      v=66,m=52
      v=70,m=66
    3、循环ASCII类型转换为char
      char vChar = (char)v;  //ASCII转字符
      char mChar = (char)m;

      执行完成
      vChar=0,mChar=8
      Char=D,mChar=7
      vChar=B,mChar=4
      vChar=F,mChar=B
    4、将字符合并为字符串
      char strKVCTmp[3]={vChar,mChar};
      strKVC += strcat(strKVCTmp," ");

      执行完成
      08 D7 B4 FB

    完整代码:

    CString strKVC="";
    for(int i=0;i<lpxCryptData->usLength;i++)
    {
    int v = (*(lpxCryptData->lpbData+i))/16; //取除数(前面一位)
    int m = (*(lpxCryptData->lpbData+i))%(16); //取模(后面一位)
    //前面一位转char
    if(v>=0&&v<=9) {v+=48;} //数字转ASCII
    else if( v>=97&&v<=122) {v=v+87;} //小写字母转ASCII
    else {v=v+55;} //大写字母转ASCII
    char vChar = (char)v; //ASCII码转为char类型
    //后面一位转char
    if(m>=0&&m<=9) {m+=48;}
    else if( m>=97&&m<=122) {m=m+87;}
    else {m=m+55;}
    char mChar = (char)m;
    //两位char合并为一个字符串
    char strKVCTmp[3]={vChar,mChar}; //char字符合并成string
    strKVC += strcat(strKVCTmp," ");
    }

  • 相关阅读:
    关于各种编程语言调用C星寻路插件的例子
    练习作品11:语音识别 准确度70%
    练习作品10:被一个傻叉坑了 要求把串口 封装到DLL中调用;
    Dynamics CRM 构建IN查询
    初识Spark2.0之Spark SQL
    从Dynamics CRM2011到Dynamics CRM2016的升级之路
    Dynamics CRM2011 导入解决方案报根组件插入错误的解决方法
    基于hadoop的BI架构
    Dynamics CRM 不同的站点地图下设置默认不同的仪表板
    Dynamics CRM 打开数据加密报错及修改用户邮件保存报错的解决方法
  • 原文地址:https://www.cnblogs.com/jieliujas/p/8821188.html
Copyright © 2020-2023  润新知