我有unsigned char* digest;
一个程序的输出,我想将它传递给char* S1;
我打字char* S1=digest;
不工作
我有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
and 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;
}