5

可能重复:
从 unsigned char * 转换为 const char * 的 C++ 样式

我有unsigned char* digest;一个程序的输出,我想将它传递给char* S1;

我打字char* S1=digest;不工作

4

4 回答 4

10

简单的答案:你需要转换它:reinterpret_cast<unsigned char*>(digest)

但是,在这种情况下,您需要注意 unsigned char* 和 char* 并不是一回事,除非数组中的所有元素都小于 128。

char * 代表从 -128 到 127(有符号)或 0 到 255(无符号)的值,另一个总是从 0 到 255 的值。

就其性质而言,摘要函数可能会在结果中返回介于 0 和 255 之间的值。

此外,数组很可能包含空字符(问题并未真正指定摘要来自何处)这一事实许多接受 char * 或 unsigned char* 的函数可能会失败,因为它们假设 char* 是字符串(如果它是(可能)固定大小的二进制摘要,则实际上不是)

于 2012-09-10T12:25:35.233 回答
2

这是因为unsigned charand char(实际上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 回答