我有一个程序的输出,它是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*并不真正相同。这是因为unsigned char
和char
(在您的编译器中实际上是signed char
)是不同的。您需要进行显式类型转换:
char* S1 = reinterpret_cast<char*>(digest);
char
是无符号的,这种情况也会发生。三种字符类型始终是*三种不同的类型,并且它们之间永远没有指针之间的隐式转换,尽管在它们三个之间保证只有两种不同的表示方式。这是为了防止您意外编写依赖于char
是否带符号或带符号整数具有什么表示的代码--您只能通过强制转换来有意地编写该代码。 - Steve Jessop字符类型是布局兼容的,因此如果您知道自己在做什么,可以使用重新解释的强制转换来简单地强制指针:
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;
}
S1
声明为char*
吗?为什么不使用unsigned char*
? - Konrad Rudolphunsigned char * digest
中间某个位置是 '\0' 或者 0。这就是为什么当reinterpret_cast<char *>(digest)
(char *)digest
时,C-String 从 0 位置截断到中间位置的原因。 - Joma