невозможно преобразовать из «unsigned char *» в «char *»

Возможный дубликат:
Приведение в стиле C ++ из unsigned char * в const char *

у меня есть unsigned char* digest; который является выходом программы, и я хотел бы передать его char* S1;

Я печатаю char* S1=digest; и не работает

3

Решение

Ответ прост: вам нужно разыграть это: reinterpret_cast<unsigned char*>(digest)

Однако в этом случае вы должны знать, что unsigned char * и char * на самом деле не одно и то же, если только все элементы в массиве не меньше 128.

char * либо представляет значения от -128 до 127 (со знаком) или от 0 до 255 (без знака),
другой всегда значения от 0 до 255.

дайджест-функции по своей природе могут возвращать значения от 0 до 255 включительно, в результате.

Кроме того, тот факт, что массив вполне может включать в себя нулевые символы (вопрос на самом деле не указывает, откуда поступает дайджест), многие функции, которые принимают char * или unsigned char *, могут потерпеть неудачу, поскольку они предполагают, что char * является строка (на самом деле это не так, если это двоичный дайджест (предположительно) фиксированного размера)

9

Другие решения

Это потому что unsigned char а также char (что на самом деле signed char в вашем компиляторе) разные. Вы должны сделать явное приведение типа:

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

Типы символов совместимы с макетом, поэтому, если вы знаете, что делаете, вы можете просто вызвать указатель с помощью переинтерпретации приведения:

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

В стиле 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;
}
0
По вопросам рекламы [email protected]