5

重複の可能性:
unsigned char * から const char * への C++ スタイルのキャスト

プログラムの出力であるがあり、unsigned char* digest;それをに渡したいchar* S1;

タイプchar* S1=digest;しても動かない

4

4 に答える 4

10

簡単な答え: キャストする必要があります:reinterpret_cast<unsigned char*>(digest)

ただし、この場合、配列内のすべての要素が 128 未満でない限り、unsigned char* と char* は実際には同じではないことに注意する必要があります。

char * は -128 から 127 (符号付き) または 0 から 255 (符号なし) の値を表し、もう一方は常に 0 から 255 の値を表します。

ダイジェスト関数は、その性質上、結果として 0 から 255 までの値を返す可能性があります。

また、配列にヌル文字が含まれている可能性が非常に高いという事実 (この質問では、ダイジェストがどこから来ているのかは実際には特定されていません) char * または unsigned char* を受け入れる多くの関数は失敗する可能性があります。文字列 ((おそらく) 固定サイズのバイナリ ダイジェストの場合、実際にはそうではありません)

于 2012-09-10T12:25:35.233 に答える
2

これはunsigned charchar(実際signed charにはコンパイラにある) と が異なるためです。明示的な型キャストを行う必要があります。

char* S1 = reinterpret_cast<char*>(digest);
于 2012-09-10T12:22:08.703 に答える
1

Char 型はレイアウトに互換性があるため、何をしているのかわかっている場合は、再解釈キャストでポインターを強制するだけです。

char * s1 = reinterpret_cast<char *>(digest);
于 2012-09-10T12:22:35.807 に答える
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;
}
于 2012-09-10T16:20:01.647 に答える