比如说从编辑框取到了字符数组ch[9]=123456789
现在想把它们转换成面值相同的十六进制数,'1'对应ch[0]=0x01,'2'对应ch[1]=0x02,'3'对应ch[2]=0x03如此类推下面的程序是我找到的,为什么实现不了呢
HexChar(char c)
{
if((c>='0')&&(c<='9'))
return c-0x30;
else if((c>='A')&&(c<='F'))
return c-'A'+10;
else if((c>='a')&&(c<='f'))
return c-'a'+10;
else 
return 0x10;
}
        for(int i=0,i<10,i++)
HexChar(ch[i]);应该怎么编,求指教

解决方案 »

  1.   

    /*+++++
    函数功能: 数字转化为对应的字符串.
    +++++*/
    void NumChangChar(float num,char* ch)
    {
    unsigned long int data;
    float numtemp; numtemp = num;
    data = (int)(numtemp / 10000);
    ch[0] = data + 0x30;
    if(data > 9)
    {
    ch[0] = '9';
    } numtemp = numtemp - data*10000;
    data = (int)(numtemp /1000);
    ch[1] = data + 0x30; numtemp = numtemp - data*1000;
    data = (int)(numtemp /100);
    ch[2] = data + 0x30; numtemp = numtemp - data*100;
    data = (int)(numtemp /10);
    ch[3] = data + 0x30; numtemp = numtemp -data*10;
    data = (int)(numtemp);
    ch[4] = data + 0x30; numtemp = numtemp - data;
    data = (int)((numtemp+0.05) * 10); //四舍五入
    if(data>9)
    data = 9;
    ch[5] = data + 0x30;
    }反过来即可
      

  2.   

    定义一个16进制的数组吧。
    char szHex[] = {0x01, 0x02......0xff};
    然后直接通过数组赋值。 
      

  3.   

    char ch[] = "123456789";

    int len = strlen(ch);
    int* buf = new int[len];
    memset(buf, 0, sizeof(int)*len); char a[10] = {0};
    char b[2] = {0};
    int i=0;
    for(; i<len; i++)
    {
    b[0] = ch[i];
    sprintf(a, "0x%02d", atoi(b));
    buf[i] = strtoul(a, NULL, 16);
    }
    CString str;
    CString tmp;
    for(i=0; i<len; i++)
    {
    tmp.Format(_T("0x%02x "), buf[i]);
    str += tmp;
    }
    AfxMessageBox(str);
      

  4.   


    如果是这样呢
     ch[] = "778899123456789";要换成ch[0]=0x77,ch[1]=0x88,ch[2]=0x99,ch[3]=0x01,ch[4]=0x02....
    前面的六个字符应该要怎么转了,要不要把数组拆成两组
      

  5.   

    把固定声明char a[10] = {0};
    编程动态声明:char* pa = new char[len];
    最后:delete[] pa;
      

  6.   

    囧,一个字符会转,两个字符就不会了吗?
    char ch[] = "778899123456789";
        
        int len = strlen(ch);
        int* buf = new int[len];
        memset(buf, 0, sizeof(int)*len);

        char a[10] = {0};
        char b[3] = {0};
        int i=0;
    #define MAX_LEN 6
    int nIndex = 0;

    for(i=0; i<MAX_LEN; i+=2)
        {
            b[0] = ch[i];
    b[1] = ch[i+1];
            sprintf(a, "0x%02d", atoi(b));
            buf[nIndex++] = strtoul(a, NULL, 16);
        }
    memset(b, 0, sizeof(b));    for(i=MAX_LEN; i<len; i++)
        {
            b[0] = ch[i];
            sprintf(a, "0x%02d", atoi(b));
            buf[nIndex++] = strtoul(a, NULL, 16);
        }
        CString str;
        CString tmp;
        for(i=0; i<nIndex; i++)
        {
            tmp.Format(_T("0x%02x "), buf[i]);
            str += tmp;
        }
        AfxMessageBox(str);
      

  7.   


    T T  我又不懂了,如果数组里面有字母的呢  比如说ch[]="7F8F9F123456789"
    好像转不了
      

  8.   

    囧,改改就行了char ch[] = "7F8F9F123456789";
        
        int len = strlen(ch);
        int* buf = new int[len];
        memset(buf, 0, sizeof(int)*len);
        
        char a[10] = {0};
        char b[3] = {0};
        int i=0;
    #define MAX_LEN 6
        int nIndex = 0;
        
        for(i=0; i<MAX_LEN; i+=2)
        {
            b[0] = ch[i];
            b[1] = ch[i+1];
            sprintf(a, "0x%c%c", b[0], b[1]);
            buf[nIndex++] = strtoul(a, NULL, 16);
        }
        memset(b, 0, sizeof(b));

        for(i=MAX_LEN; i<len; i++)
        {
            b[0] = ch[i];
            sprintf(a, "0x%02d", atoi(b));
            buf[nIndex++] = strtoul(a, NULL, 16);
        }
        CString str;
        CString tmp;
        for(i=0; i<nIndex; i++)
        {
            tmp.Format(_T("0X%02X "), buf[i]);
            str += tmp;
        }
        AfxMessageBox(str);
      

  9.   

    有这么复杂么?StrToIntEx一个函数搞定