下午密码键盘返回了一个校验码,是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++开发中BYTE类型数组转为对应的字符串的更多相关文章

  1. JSon_零基础_001_将布尔类型数组转换为JSon格式字符串,返回给界面

    将布尔类型数组转换为JSon格式字符串,返回给界面 需要导入包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * 下一步com ...

  2. java中的lis数组转为json数据

    第一个想到的办法就是 javascript中的replace 也就是先将list数组转为 字符串再对 字符串  replace 但是万万没想到javascript的replace函数在替换数据时, 默 ...

  3. Java 中 byte 类型初始化问题

    很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下. 在使用中,需要将 byte 类型的的每一位都置 1.我 ...

  4. 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)

    先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...

  5. Agile PLM 开发中AgileAPI类型对应控制台分类说明

    1)    分类中的一级大类PLM后台管理的控制台中,每个分类中的一级大类都对应AgileAPI中一个类型 IServiceRequest对应产品服务请求,表为:psrIPrice对应价格,表为:pr ...

  6. C#中byte类型运算

    首先看下面一段代码 byte x = 1; byte y = 2; byte z = x + y; Console.WriteLine(z); 可能很多人会说显示结果是3. 其实,这段代码无法运行,因 ...

  7. Java中Byte类型数据在运算中的问题

    比如: byte a=1; byte b=2; byte c; c=a+b; //这样是计算不出c,是错误的 c=a+1; //这样也是不能计算c的 c=64+1; //为什么这样就能计算c,在Jav ...

  8. C#中byte[]类型转换为其它类型

    我们这里就举byte[]类型和long类型的转换,其它数据类型用BitConverter类以此类推: /// <summary> /// 字节数组转换为long类型 /// </su ...

  9. ArcEngine开发中“错误类型"****"未定义构造函数”

    from:http://blog.csdn.net/mengdong_zy/article/details/8990593 问题 在ArcEngine开发的时候,在编译时,发现出现这样的错误,出错的地 ...

随机推荐

  1. 看到个有趣的方法批量下载rtf模板

    一般想要批量下载rtf模板我们都是用fndload来实现或者 perl download.pl来实现,今天看到一个比较有趣的方法 Hi, Blob column 'template file data ...

  2. spring2.5与hibernate3升级后的bug

    手头有一个项目,使用的是struts2 hibernate3 spring2.5 是之前的老项目了,spring与hibernate的版本都比较低 自己看了最新的spring4与hibernate4, ...

  3. Property属性,&nbsp;KVC键值编码OC…

    1.属性:帮你自动生成setter 和 getter 方法      属性的声明:(写在.h中)      格式: @property 数据类型 属性名      属性的实现:(写在.m中)      ...

  4. iOS语音通话(语音对讲)

    中间参考了别人的Demo,下载地址不记得了. 因为项目需要做一个语音对讲功能,其实说白了就是类似QQ的语音通话,但是资料少之又少,研究了好久,才跟同事弄出一个粗略的版本.我记性不好,所以来记录一下,也 ...

  5. Unity 5.X扩展编辑器之打包assetbundle

    5.x的assetbundle与4.x以及之前的版本有些不同,不过本质是一样的,只不过5.x打包assetbundle更为简单和人性化了,总体来说只需要三个步骤: 第一步:创建打包资源 //这里是一个 ...

  6. Dynamics CRM 通过OData查询数据URI中包含中文的情况

    filter条件如下"?$filter=new_name eq '采购主管' and new_entityname eq 'new_purchaseenquiry' ",如果用这个 ...

  7. Leetcode_34_Search for a Range

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/44021767 Given a sorted array o ...

  8. SpartanBrowser产品和安全特性简介

    v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...

  9. GRUB与Linux系统修复(第二版)

    GRUB配置解析 配置文件保存在 /boot/grub/grub.conf[/boot分区最好应该单独划分出来] 软链接保存在 /etc/grub.conf 1.grub.conf文件分析 defau ...

  10. ActiveX数据对象之事务控制在VB和DELPHI中的应用

            本文发表在中国人民解放军"信息工程大学"学报 2001年第3期.        ActiveX数据对象之事务控制在VB和DELPHI中的应用             ...