下午密碼鍵盤返回了一個校驗碼,是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," ");
}