cannot convert from 'unsigned char *' to 'char *'

29,793

Solution 1

The simple answer: You need to cast it: reinterpret_cast<unsigned char*>(digest)

However, in this case you need to be aware that unsigned char* and char* are not really the same thing unless all elements in the array are less than 128.

char * either represents values from -128 to 127 (signed) or 0 to 255 (unsigned), the other always values from 0 to 255.

digest functions by their nature are likely to return values between 0 and 255, inclusive, in the result.

Also, the fact that the array might very well include null characters (the question does not really specify where the digest is coming from) many functions that accept char * or unsigned char* are likely to fail, since they assume the char* is a string (which it is not, really, if it is a binary digest of (presumably) fixed size)

Solution 2

It's because unsigned char and char (which is really signed char in your compiler) are different. You have to make an explicit typecast:

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

Solution 3

Char types are layout compatible, so if you know what you're doing, you can simply force the pointer with a reinterpreting cast:

char * s1 = reinterpret_cast<char *>(digest);
Share:
29,793
Hashed
Author by

Hashed

Updated on September 11, 2020

Comments

  • Hashed
    Hashed over 3 years

    Possible Duplicate:
    C++ style cast from unsigned char * to const char *

    I have the unsigned char* digest; which is the output of a program and i would like to pass it to a char* S1;

    I type char* S1=digest; and does not work

  • Steve Jessop
    Steve Jessop over 11 years
    It would also happen on an implementation on which char is unsigned. The three char types are always three distinct types and there's never an implicit conversion between pointers-to-them, even though there are guaranteed only two distinct representations among the three of them. It's to stop you accidentally writing code that depends on whether char is signed or what representation signed integers have -- you can only write that code deliberately by casting.
  • sellibitze
    sellibitze over 11 years
    I'd like to stress that char, signed char and unsigned char are in fact three distinct types.