数组转换成字符串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," ");
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论