字串轉換為十六進位

來源:互聯網
上載者:User

一般的程式對字串操作,串口程式卻時常採用十六進位串。我在本在的社區中看到一位大俠的一個轉換演算法不錯,貼出來和大家貢獻。

char ConvertHexChar(char ch);

int String2Hex(CString str, CByteArray &senddata,char*tag);

函數功能:將CString 類型的str轉換成CByteArray類型,儲存在senddata中,tag是分隔字元。

 

函數原型:

int String2Hex(CString str, CByteArray &senddata,char* tag)
{
 int   hexdata,lowhexdata;  
 int   hexdatalen=0;  
 int   len=str.GetLength();  
 senddata.SetSize(len/2);  
 for(int   i=0;i<len;)  
 {  
  char   lstr,hstr=str[i];  
  if(!strcmp(hstr,tag)  
  {  
   i++;  
   continue;  
  }  
  i++;  
  if(i>=len)  
   break;  
  lstr=str[i];  
  hexdata=ConvertHexChar(hstr);  
  lowhexdata=ConvertHexChar(lstr);  
  if((hexdata==16)||(lowhexdata==16))  
   break;  
  else    
   hexdata=hexdata*16+lowhexdata;  
  i++;  
  senddata[hexdatalen]=(char)hexdata;  
  hexdatalen++;  
 }  
 senddata.SetSize(hexdatalen);  
 return   hexdatalen;
}

char ConvertHexChar(char ch)
{
  if((ch>='0')&&(ch<='9'))  
  return   ch-0x30;  
  else   if((ch>='A')&&(ch<='F'))  
  return   ch-'A'+10;  
  else   if((ch>='a')&&(ch<='f'))  
  return   ch-'a'+10;  
  else   return   (-1);  

}

例:

要發送的十六進位資料為:FF,00,00,00,3F,00,##     分隔字元為“,”

CByteArray senddata;

CString str="FF,00,00,00,3F,00,## ";

String2Hex(str,senddata,",");

接下來就可以把senddata.GetData()獲得的資料通過串口發送出去了,這時發送的是十六進位的資料。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.