应该显示一个未签名的char *&签名的char *输出完全相同的结果

时间:2011-10-02 22:21:06

标签: c++

我不确定我是否正确地将unsigned char*翻译/转换为常规signed char*

unsigned char*是一个经过哈希处理的字符串。以下代码是否正确地将unsigned char*转换为signed char*

std::string message = "to be encrypted";
unsigned char hashMessage[SHA256_DIGEST_SIZE];

SHA256::getInstance()->digest( message, hashMessage );

// is this conversion correct
char* hashMessageSigned = reinterpret_cast<char*>(hashMessage); 
printf("Unsigned Char Hash: %s\n", hashMessageSigned);  //  The 2 printf's print out exactly the same strings is that correct?
printf("Signed Char Hash: %s\n", hashMessage);

1 个答案:

答案 0 :(得分:4)

你在这里没有转换任何东西。两个printf都被指示将数据视为可打印字符串。

签名或未签名是一个解释问题。 0xFF可以是255或-1,具体取决于您的解释方式。该类型的“符号”是帮助编译器解释数据的指令。

但在这种情况下,您根本不将数据视为数字,将其视为字符串,然后解释完全不同:0xFF是ASCII表格255处的字符。那里没有迹象。

为了确保你得到它:reinterpret_cast<char*>不转换数据,它转换编译器处理指针的方式。 %s指示printf应如何处理指针,与之前指示编译器执行的操作无关(并且在运行时完成)。