型如unsigned char ddd[]= {0x3f,0x2a,0xfe,0xe1,0x42,0x32,0xa2,0xd2,0xbb};
转换为unsigned char sss[] = "3f2afee14232a2d2bb";
因为ddd可能比较长,用itoa一个一个转感觉效率比较低,有没有好的做法?

解决方案 »

  1.   

    http://home.nuc.edu.cn/~titilima/readarticle.php?id=24
      

  2.   

    //lpBuf--  {0x3f,0x2a,0xfe,0xe1,0x42,0x32,0xa2,0xd2,0xbb};
    //szString --  "3f2afee14232a2d2bb";
    //nLen  --lpBuf的长度 
    void  tostring(const unsigned  char* lpBuf, unsigned  char* szString, int nLen)
    { unsigned char dH, dL;
    int i;
    szString[ nLen * 2 ] = 0;
    for(i = 0; i < nLen; i++ )
    {  
                      dH = 0x30 + ((lpBuf[i]>>4) & 0x0f);
    dL = 0x30 + (lpBuf[i] & 0x0f);
    if( dH > 57 )  
    dH = dH + 7;
    if( dL > 57 )  
    dL = dL + 7;
    szString[ i * 2 ] = dH;
    szString[ i * 2 + 1 ] = dL;
    }
    }
      

  3.   

    //调用setHexToStr()sss = "3f2afee14232a2d2bb";
    char sss[100];
    unsigned char ddd[]= {0x3f,0x2a,0xfe,0xe1,0x42,0x32,0xa2,0xd2,0xbb};char SetAsciiToStr(char c)
    {
       return c>9?c-0xa+'a':c+'0';
    }void setHexToStr(char*sss,char*ddd)
    {
        int i,j,len=sizeof(ddd);
        for(i=j=0;i<len;i++){
          sss[j++]=SetAsciiToStr(ddd[i]>>4);
          sss[j++]=SetAsciiToStr(ddd[i]&0xF);
        }
        sss[j]=0;
    }
      

  4.   

    void CWingoDlg::OnButtonConvert() 
    {
    unsigned char ddd[]= {0x3f,0x2a,0xfe,0xe1,0x42,0x32,0xa2,0xd2,0x1b};
    AfxMessageBox(ConvertToStr(ddd,9));
    }CString CWingoDlg::ConvertToStr(unsigned char *c,int n)
    {
    CString str,tmp;
    int i=0;
    while (i<n) {
    tmp.Format("%x",*(c+i++));
    str += tmp;
    }
    return str;
    }
    看一下 我这个,但是不知道执行,谁的效率更好
      

  5.   

    http://home.nuc.edu.cn/~titilima/readarticle.php?id=24
      

  6.   

    3jaja的算法好像结果不对,len=sizeof(ddd);是取指针的长度,结果为4。即使传入正确的长度,结果也不正确。