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," ");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM