如题,是这样的,
定义CString dmac0;
unsigned char des[6];
des[6]是网卡的mac地址格式是:0xXX。
现在要输入dmac0=0x00;把dmac0赋值给mac。怎么转换啊?
求助于各位大虾了。帮助帮助我吧。

解决方案 »

  1.   

    dmac0 = "\0\0\0\0\0\0";
    for(int i=0; i<6; i++)
      des[i] = (unsigned char)dmac0[i];是这个意思吗
      

  2.   

    可以直接用这个库函数: 
    long   strtol(const   char   *s,   char   **endptr,   int   radix) 
    将数值字符串转换成长整形格式数 
    s:待转换的浮点字符串,radix:转换的数制 
    endptr:转换后的尾数字符串 
    例子: 
    #include   <stdlib.h> 
    #include   <stdio.h> int   main(void) 

            char   *string   =   "10a1 ",   *endptr; 
            long   lnumber; 
            lnumber   =   strtol(string,   &endptr,   16); 
            printf( "string   =   %s     long   =   %ld ",   string,   lnumber); 
            return   0; 
    }
      

  3.   

    dmac0=0x00;把dmac0赋值给mac。怎么转换啊
    //mac地址6个字节dmac0 --> mac,是指更改网卡mac地址?
      

  4.   


    BOOL ParseMac(LPCTSTR pszMac, BYTE *p)
    {
    BYTE n,m;
    for(int i=0;i<6;i++)
    {
    n = (*pszMac)&0xFF;
    pszMac++;
    m = (*pszMac)&0xFF;
    if(n < 48 || n > 102 || m < 48 || m > 102) return FALSE;
    if(n <= 57) n -= 48;
    else if(n < 65) return FALSE;
    else if(n <= 70) n-= 55;
    else if(n < 97) return FALSE;
    else n -= 87; if(m <= 57) m -= 48;
    else if(m < 65) return FALSE;
    else if(m <= 70) m-= 55;
    else if(m < 97) return FALSE;
    else m -= 87;

    p[i] = (n<<4)|m;
    pszMac++;
    if(*pszMac == _T('-')) pszMac++;
    if(!*pszMac) break;
    }
    return (i==6);
    }
    调用:
    CString strMac(_T("001D-099C-3966"));
    unsigned char des[6];
    ParseMac(strMac, des);//des中的六个字节被填充!
      

  5.   

    订正!BOOL ParseMac(LPCTSTR pszMac, BYTE *p)
    {
        BYTE n,m;
        for(int i=0;i<6;i++)
        {
            n = (*pszMac)&0xFF;
            pszMac++;
            m = (*pszMac)&0xFF;
            if(n < 48 || n > 102 || m < 48 || m > 102) return FALSE;
            if(n <= 57) n -= 48;
            else if(n < 65) return FALSE;
            else if(n <= 70) n-= 55;
            else if(n < 97) return FALSE;
            else n -= 87;        if(m <= 57) m -= 48;
            else if(m < 65) return FALSE;
            else if(m <= 70) m-= 55;
            else if(m < 97) return FALSE;
            else m -= 87;
            
            p[i] = (n<<4)|m;
            pszMac++;
            if(*pszMac == _T('-')) pszMac++;
            if(!*pszMac) break;        
        }
        return (i==5);
    }
      

  6.   

    CString str = _T("00-01-02-03-04-05");
    unsigned char mac[6];
    _stscanf(str, _T("%02u-%02u-%02u-%02u-%02u-%02u"), mac, mac + 1, mac + 2, mac + 3, mac + 4, mac + 5);这个意思?
      

  7.   

    _stscanf(str, _T("%02x-%02x-%02x-%02x-%02x-%02x"), mac, mac + 1, mac + 2, mac + 3, mac + 4, mac + 5);
      

  8.   

    这个题目没有说清楚
    建议楼主把你的输入和输出写清楚,比如:
    输入:"5577a8e47f"
    输出:
       des[0]=0x55;
       des[1]=0x77;
       ...如果是这样的,那么你参照 1 楼就可以了
      

  9.   

    就是假如我的机器的网卡定义为unsigned char des[6]={0x00,0xe2,0x56,0x8f,0x18,0x26}
    那么我的程序就只能在我的机器上使用,现在我想在多台机器上也能使用,那么这个网卡的地址就得改变成手动输入的。
    现在不知道怎么输入进去,
      

  10.   

    我的意思是,一台机器的网卡地址定义为:unsigned char des[6]; 
    我用mfc做界面,定义dmac0,dmac1,dmac2,dmac3,dmac4,dmac5都是CString类型的.
    然后输入dmac0=0x00,dmac1=0xe2,dmac2=0x56,dmac3=0x8f,dmac4=0x18,dmac5=0x26
    赋值:des[0]=dmac0,des[1]=dmac1,......des[5]=dmac5.
    不知道我描述的清楚不清楚,就是这样,请求帮助啊,谢谢了。
      

  11.   


    一楼的方法就可以了,强制转换过去即可。
    注意 unsigned char 类型的范围是 0x00 - 0xff。
      

  12.   

    大哥,我试了,但是还是不好使。我是在mfc下作的。
      

  13.   

    另外,你是直接在界面里边输入 0xXX 字符串文本是吗?如果是这样,那么要将输入的字符串文本转换成对应的ASCII码值:
    如下:
        //转换地址成十进制长整形
        char*  end = NULL;
        char*  p = (char*)(LPCSTR) dmac0; // 只为获得指针,用(LPCTSTR)str
        long   lDes   =  strtol(p, &end, 16);//将16进制数-〉十进制数
    end  = NULL;
    p = NULL;
        之后,赋值给 des[0]=lDes,因为是高精度数字向低精度转化,所以编译器会提示警告,不必理会,事先必须保证你的输入数据大小是合适的范围。