下午密码键盘返回了一个校验码,是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," ");
}