用mfc编程遇到问题,需要将得到的十进制数(或字符形式十进制数)转换为十六进制,要求十六进制数为unsigned char型,目的是将转换后的数赋值给CByteArray数组指定的索引值里面。请教高手如何实现,或者有没有好的建议。谢谢!

解决方案 »

  1.   

    如果你是转换成十六进制的字符串的话
    可以使用
    CString str;
    str.Format("%x",14);
      

  2.   

    unsigned char x = atoi( "1234" );
      

  3.   

    不是字符串,转换为字符串的我会。十六进制字符串类型再赋值给CbyteArray的对象
    如:CByteArray   a;
        a.SetAt(5,m);     //这里m要求unsigned char 类型。  我需要解决的是:1,十进制数(int型)转换为unsigned char型
              或者 2,十进制或十六进制字符串转换为unsigned char型
          如何实现?解决上面任何一个都可以。
      

  4.   


    如果字符串是"abcd”这语句也可以么?
      

  5.   


    转换成十六进制的字符串的话问题还没解决,接下来需要将十六进制的字符串转化为unsigned char型(目的是将转换后的数赋值给CByteArray数组指定的索引值里面),这一步如何实现呢?
      

  6.   

    这个问题的思维不要复杂了,char是不存在任何进制的一个字符型数字 ‘a’ 存入unsigned char中,等价于存储了对应的asc码
    'a' 也可以等价于一个int 类型
    一般的表达式 int b='a' 是没有任何问题的所谓的16进制存入unsigned char 就是一个int类型存入unsigned char的问题
    等价于unsigned char a=38假设你的16进制数 为0a,也就等价于十进制的10
    unsigned char a=10 就可以把这oa的十六进制数存如char 中了当然,另一种情况是你的16进制数本身是以字符形式存在的如
    char* a=“0a”;
    那就写函数了如下:int func(const char* str,unsigned char* digit16)   
    {   
    int   i,   len;   
    int   hi,   lo;   
    if(str==NULL||digit16==NULL)   
    return   -1;   
    if((len = strlen(str))%2 ==1)   
    return   -2;   
    for(i=0;i<len;i++)   
    if(!((str[i]>= '0'&&str[i]<='9')||     
    (str[i]>='A'&&str[i]<='F')||   
    (str[i]>='a'&&str[i]<='f')))   
    return   -3;   
    for(i =0;i<len/2;i++)   
    {   
    if(str[i*2]>='0'&&str[i*2]<='9')   
    hi=str[i*2]-'0';   
    else if(str[i*2]>='a'&&str[i*2]<='f')   
    hi=str[i*2]-'a'+10;   
    else     
    hi=str[i*2] -'A'+10;   
    if(str[i*2+1]>='0'&& str[i* 2+1]<= '9')   
    lo=str[i*2+1]-'0';   
    else if(str[i*2+1]>='a'&&str[i*2+1]<='f')
    lo=str[i*2+1]-'a'+10;
    else  
    lo=str[i*2+1]-'A'+10;
    digit16[i]=hi*16+lo;
    }
    return i;  /*length of the number*/   
    }