如何将十六进制值分配给C程序中的unsigned char变量

时间:2012-05-14 15:39:14

标签: c hex unsigned-char

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

2 个答案:

答案 0 :(得分:2)

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

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

但你想要的是完全不同的东西,只有在你链接到其他问题后才会变得清晰。 (如果你对你实际做的事情感到困惑,那么就把这些事情从这样的上下文中删除是很糟糕的,尤其是。)

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

答案 1 :(得分:1)

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

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

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

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

我建议你阅读representation of numbers。许多新程序员都遇到了这个问题。