显示无符号字符*和有符号字符*输出的结果是否完全相同

Should displaying an unsigned char* & an signed char* output exactly the same result

本文关键字:字符 是否 结果是 结果 输出 无符号 符号 显示      更新时间:2023-10-16

我不确定我是否正确翻译/转换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: %sn", hashMessageSigned);  //  The 2 printf's print out exactly the same strings is that correct?
printf("Signed Char Hash: %sn", hashMessage);

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

有符号或无符号是一个解释问题。0xFF可以是255或-1,这取决于您如何解释它。类型的"符号"是帮助编译器解释数据的指令。

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

只是确保你明白了:reinterpret_cast<char*>不转换数据,它转换编译器对待指针的方式。%s指示printf应该如何处理指针,并且与编译器之前被指示做的事情无关(并且在运行时完成)。