我有unsigned char* digest;
这是程序的输出,我想将其传递给char* S1;
我输入char* S1=digest;
但无效
答案 0 :(得分:9)
简单的答案:你需要施放它:reinterpret_cast<unsigned char*>(digest)
但是,在这种情况下,您需要注意unsigned char *和char *并不是真的相同,除非数组中的所有元素都小于128.
char *表示-128到127(有符号)或0到255(无符号)的值, 另一个总是从0到255的值。
摘要函数本质上可能会在结果中返回介于0和255之间的值。
此外,数组可能包含空字符的事实(问题并未真正指定摘要的来源)许多接受char *或unsigned char *的函数可能会失败,因为它们假定为char *是一个字符串(它实际上不是,如果它是(可能是)固定大小的二进制摘要)
答案 1 :(得分:2)
这是因为unsigned char
和char
(编译器中真的是signed char
)是不同的。你必须做一个明确的类型转换:
char* S1 = reinterpret_cast<char*>(digest);
答案 2 :(得分:1)
Char类型与布局兼容,因此如果您知道自己在做什么,只需使用重新解释的强制转换强制指针:
char * s1 = reinterpret_cast<char *>(digest);
答案 3 :(得分: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;
}