C语言十六进制数据同字符串的相互转换

  1. #include "stdafx.h"   
  2.   
  3. #include    
  4. #include    
  5. #include    
  6. #include    
  7.   
  8. /*  
  9. 入口参数:pSrc  源十六进制数据  
  10. 出口参数:dest  存放运算结果  
  11.     返回:true  转换成功  
  12.           false 失败  
  13. */   
  14. bool  Hex2String(unsigned  char  *pSrc,std::string &dest, int  nL)  
  15. {  
  16.     char  buf[256];  
  17.       
  18.     memset((char  *)buf,0, sizeof (buf));  
  19.   
  20.     unsigned char  hb;  
  21.     unsigned char  lb;  
  22.   
  23.     for ( int  i=0;i
  24.     {  
  25.         hb=(pSrc[i]&0xf0)>>4;  
  26.   
  27.         if ( hb>=0 && hb<=9 )  
  28.             hb += 0x30;  
  29.         else   if ( hb>=10 &&hb <=15 )  
  30.             hb = hb -10 + 'A' ;  
  31.         else   
  32.             return   false ;  
  33.   
  34.         lb = pSrc[i]&0x0f;  
  35.         if ( lb>=0 && lb<=9 )  
  36.             lb += 0x30;  
  37.         else   if ( lb>=10 && lb<=15 )  
  38.             lb = lb - 10 + 'A' ;  
  39.         else   
  40.             return   false ;  
  41.   
  42.         buf[i*2]   = hb;  
  43.         buf[i*2+1] = lb;  
  44.     }  
  45.     dest = buf;  
  46.     return   true ;  
  47. }  
  48.   
  49. /*  
  50. 入口参数:src  源字符串  
  51. 出口参数:dest  存放运算结果  
  52.     返回:true  转换成功  
  53.           false 失败  
  54. */   
  55. bool  String2Hex(std::string &src,unsigned  char  *dest)  
  56. {  
  57.     unsigned char  hb;  
  58.     unsigned char  lb;  
  59.   
  60.     if (src.size()%2!=0)  
  61.         return   false ;  
  62.   
  63.     transform(src.begin(), src.end(), src.begin(), toupper);  
  64.   
  65.     for ( int  i=0, j=0;i
  66.     {  
  67.         hb=src[i];  
  68.         if ( hb>= 'A'  && hb<= 'F'  )  
  69.             hb = hb - 'A'  + 10;  
  70.         else   if ( hb>= '0'  && hb<= '9'  )  
  71.             hb = hb - '0' ;  
  72.         else   
  73.             return   false ;  
  74.   
  75.         i++;  
  76.         lb=src[i];  
  77.         if ( lb>= 'A'  && lb<= 'F'  )  
  78.             lb = lb - 'A'  + 10;  
  79.         else   if ( lb>= '0'  && lb<= '9'  )  
  80.             lb = lb - '0' ;  
  81.         else   
  82.             return   false ;  
  83.   
  84.         dest[j++]=(hb<<4)|(lb);  
  85.     }  
  86.     return   true ;  
  87. }  
  88.   
  89. //下面是使用举例,在VisualStudio2008+SP1中调试通 过   
  90. int  _tmain( int  argc, _TCHAR* argv[])  
  91. {  
  92.     unsigned char  srcB[]={0x12,0x34,0x56,0x78,0x90,0xab,0xbc,0xcd,0xde,0xef};  
  93.   
  94.     std::string strDest;  
  95.   
  96.     Hex2String(srcB,strDest,sizeof (srcB));  
  97.     std::cout<<"HexToString:" <
  98.   
  99.     if (String2Hex(strDest,srcB))  
  100.         std::cout<<"StringToHex:Success!" <
  101.     else   
  102.         std::cout<<"StringToHex:Failed!" <
  103.   
  104.     return  0;  

你可能感兴趣的:(c++)