-6

我要存储在变量中的十六进制值的长度为 32。“DC4938C31B9E8B30F32FC0F5EC894E16”。我还想打印这个值,但我不知道 printf 中 unsigned char 的格式说明符。

4

2 回答 2

2

那是一个 32 个字符的字符串,是十六进制数字。这使得 16字节,或 128

m0skit0 告诉你如何将它存储在一个字符串中。如果你真的想把它存储在一个整数中,你需要类似的东西unsigned long long intvar = strtoull( stringvar, NULL, 16 )——只要你的机器上的“long long”可以容纳 128 位。

但是你想要的是完全不同的东西,只有在你链接到另一个问题之后才变得清楚。(像这样断章取意真的很糟糕,尤其是当你对自己实际在做什么感到困惑时。)

如果您查看 API 文档,您会看到您正在查看的参数是指向 DES_cblock的指针。那不是字符串,也不是整数。看看另一个问题seedivsetup它们是如何初始化的,并思考一分钟。

于 2012-05-14T15:44:47.947 回答
1

那不是一个char. 这是一个字符串:

unsigned char* value = "DC4938C31B9E8B30F32FC0F5EC894E16";
printf("%s\n", value);

此外,如果这是一个数字,我强烈不建议您将其转换为字符串或字符,因为字符串比数字更慢并且更容易出现编码错误。

表示为十六进制的数字(而不是十六进制数字,所有数字都是十六进制,它只是值的表示)没有任何字符。再次,它是一个数字。您当然可以将其转换为字符串(与任何其他数字一样),但这样做您应该有充分的理由(例如,您要使用的算法使用字符串比使用数字更快)。

我建议您阅读有关数字表示的内容。很多新程序员在这个话题上都有问题。

于 2012-05-14T15:41:48.920 回答