Возможный дубликат:
Приведение в стиле C ++ из unsigned char * в const char *
у меня есть unsigned char* digest;
который является выходом программы, и я хотел бы передать его char* S1;
Я печатаю char* S1=digest;
и не работает
Ответ прост: вам нужно разыграть это: reinterpret_cast<unsigned char*>(digest)
Однако в этом случае вы должны знать, что unsigned char * и char * на самом деле не одно и то же, если только все элементы в массиве не меньше 128.
char * либо представляет значения от -128 до 127 (со знаком) или от 0 до 255 (без знака),
другой всегда значения от 0 до 255.
дайджест-функции по своей природе могут возвращать значения от 0 до 255 включительно, в результате.
Кроме того, тот факт, что массив вполне может включать в себя нулевые символы (вопрос на самом деле не указывает, откуда поступает дайджест), многие функции, которые принимают char * или unsigned char *, могут потерпеть неудачу, поскольку они предполагают, что char * является строка (на самом деле это не так, если это двоичный дайджест (предположительно) фиксированного размера)
Это потому что unsigned char
а также char
(что на самом деле signed char
в вашем компиляторе) разные. Вы должны сделать явное приведение типа:
char* S1 = reinterpret_cast<char*>(digest);
Типы символов совместимы с макетом, поэтому, если вы знаете, что делаете, вы можете просто вызвать указатель с помощью переинтерпретации приведения:
char * s1 = reinterpret_cast<char *>(digest);
В стиле 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;
}