强制转换没用,vc会告诉你“无法将unsigned char*转换为const char*”

解决方案 »

  1.   

    写一个函数不就可以了。
    len为字符串的长度
    chartobyte(char *a,BYTE *b,int len)
    {
        for(int i=0;i<len;i++)
            b[i]=(BYTE)a[i];
    }
      

  2.   

    可以强制转换呀!!!
    害的我还特地试了一下,结果是可以。把Warning Level调到4都没问题。
      

  3.   

    to spiker:
    分两步转:
    unsigned char* s;
    const char* p = (const char*)(char*)s;
      

  4.   

    事实证明,转换是可以的,但有个问题,举例:我从IIS的Metabase中取出的ftp服务器的名字如果是"myftp",直接输出和转换后输出都成了"m",只有做一个循环单个字符输出才行,那样子是"m y f t p",空格部分应该是"\0"。既然widows自己把这些值的类型默认为unsigned char,那么没理由没有针对的转换函数。而且我有一点不得其解,char*指向的是字符串,又不用作数值计算,为什么需要定义为unsigned类型。
      

  5.   

    再说一下,好像unsigned char*指定的是Unicode类型,但我用过的Unicode与Ansi转换汉输如WideCharToMultiByte和_com_util::ConvertBSTRToString都提示了相似的错误信息,不得其解,如WideCharToMutiByte的用法
    unsigned char* comment;
    char *temp;
    WideCharToMultiByte(CP_ACP, 0, comment, -1, temp, 256, NULL, NULL);//第六个参数不是很确定
    编译后:
    error C2664: 'WideCharToMultiByte' : cannot convert parameter 3 from 'unsigned char *' to 'const unsigned short *'
    望赐教
      

  6.   

    再强制转换一下看看:
    char temp[256];
    WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)comment, -1, temp, 256, NULL, NULL);
      

  7.   

    非常感谢,终于能用了,但是unsigned char*不是Unicode吗,为什么还要转换一下呢。如果不是Unicode,那又是什么格式呢,我在参考书上一直找不到相关信息。