无法从'unsigned char *'转换为'char *'

时间:2012-09-10 12:19:22

标签: c++ char unsigned

  

可能重复:
  C++ style cast from unsigned char * to const char *

我有unsigned char* digest;这是程序的输出,我想将其传递给char* S1;

我输入char* S1=digest;但无效

4 个答案:

答案 0 :(得分:9)

简单的答案:你需要施放它:reinterpret_cast<unsigned char*>(digest)

但是,在这种情况下,您需要注意unsigned char *和char *并不是真的相同,除非数组中的所有元素都小于128.

char *表示-128到127(有符号)或0到255(无符号)的值, 另一个总是从0到255的值。

摘要函数本质上可能会在结果中返回介于0和255之间的值。

此外,数组可能包含空字符的事实(问题并未真正指定摘要的来源)许多接受char *或unsigned char *的函数可能会失败,因为它们假定为char *是一个字符串(它实际上不是,如果它是(可能是)固定大小的二进制摘要)

答案 1 :(得分:2)

这是因为unsigned charchar(编译器中真的是signed char)是不同的。你必须做一个明确的类型转换:

char* S1 = reinterpret_cast<char*>(digest);

答案 2 :(得分:1)

Char类型与布局兼容,因此如果您知道自己在做什么,只需使用重新解释的强制转换强制指针:

char * s1 = reinterpret_cast<char *>(digest);

答案 3 :(得分:0)

C样式演员:s1=( char *)digest;

C ++样式演员:s1= reinterpret_cast<char *>(digest);

#include <iostream>
using namespace std ;



int main(void)
{

    unsigned char* digest;
    char * s1c,*s1cpp; 


    //C style cast
    s1c=(  char *)digest;


    //C++ style cast
    s1cpp= reinterpret_cast<char *>(digest);




  cout<<" \nPress any key to continue\n";
  cin.ignore();
  cin.get();

   return 0;
}