我不确定我是否正确地将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);
答案 0 :(得分:4)
你在这里没有转换任何东西。两个printf
都被指示将数据视为可打印字符串。
签名或未签名是一个解释问题。 0xFF可以是255或-1,具体取决于您的解释方式。该类型的“符号”是帮助编译器解释数据的指令。
但在这种情况下,您根本不将数据视为数字,将其视为字符串,然后解释完全不同:0xFF是ASCII表格255处的字符。那里没有迹象。
为了确保你得到它:reinterpret_cast<char*>
不转换数据,它转换编译器处理指针的方式。 %s
指示printf
应如何处理指针,与之前指示编译器执行的操作无关(并且在运行时完成)。