プログラムの出力であるがあり、unsigned char* digest;
それをに渡したいchar* S1;
タイプchar* S1=digest;
しても動かない
プログラムの出力であるがあり、unsigned char* digest;
それをに渡したいchar* S1;
タイプchar* S1=digest;
しても動かない
簡単な答え: キャストする必要があります:reinterpret_cast<unsigned char*>(digest)
ただし、この場合、配列内のすべての要素が 128 未満でない限り、unsigned char* と char* は実際には同じではないことに注意する必要があります。
char * は -128 から 127 (符号付き) または 0 から 255 (符号なし) の値を表し、もう一方は常に 0 から 255 の値を表します。
ダイジェスト関数は、その性質上、結果として 0 から 255 までの値を返す可能性があります。
また、配列にヌル文字が含まれている可能性が非常に高いという事実 (この質問では、ダイジェストがどこから来ているのかは実際には特定されていません) char * または unsigned char* を受け入れる多くの関数は失敗する可能性があります。文字列 ((おそらく) 固定サイズのバイナリ ダイジェストの場合、実際にはそうではありません)
これはunsigned char
、char
(実際signed char
にはコンパイラにある) と が異なるためです。明示的な型キャストを行う必要があります。
char* S1 = reinterpret_cast<char*>(digest);
Char 型はレイアウトに互換性があるため、何をしているのかわかっている場合は、再解釈キャストでポインターを強制するだけです。
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;
}