阅读背景:

如何解决unsigned char * 到 const char *的转换

来源:互联网 
  在使用Windows SDC的IIS SDK部分的Admin Base Object时,IIS 的Metabase中的属性值都以unsigned char *类型储存,取出后用cout<<输出的形式为字符和'
  在使用Windows SDC的IIS SDK部分的Admin Base Object时,IIS 的Metabase中的属性值都以unsigned char *类型储存,取出后用cout<<输出的形式为字符和'\0'相间的形式,不知谁知道如何使unsigned char* 类型转换到char *类型。

9 个解决方案

#1


强制转换呀!

#2


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

#3


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

#4


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

#5


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

#6


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

#7


再说一下,好像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 *'
望赐教

#8


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

#9


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

'相间的形式,不知谁知道如何使unsigned char* 类型转换到char *类型。   在使用Windows SDC的IIS SDK部分的Admin Base Obje



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: