【问题标题】:How to assign a hexadecimal value to an unsigned char variable in a C program [closed]如何在 C 程序中为 unsigned char 变量分配十六进制值[关闭]
【发布时间】:2012-05-22 03:03:43
【问题描述】:

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

【问题讨论】:

  • 您是否尝试将其存储为字符串?否则,您将需要一个 unsigned char 数组。
  • 我使用的变量有这个声明。无符号字符输出[512];
  • 请把你的问题说清楚一点!真的很难说你想要达到什么目标。
  • @Manas:你正在愉快地翻阅词汇,那里。包含十六进制数字的字符串是一回事,十六进制整数文字是另一回事,printf() 可以打印十六进制 format,但仍然不太清楚你想要什么。语言的精确度是编程的必备技能。
  • @Manas:你的意思是你在沟通中没有更清楚的问题?我建议返回一些高级编程教程,而不是摆弄一些加密 API……在跑步之前先学会走路。

标签: c hex unsigned-char


【解决方案1】:

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

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

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

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

我建议您阅读有关representation of numbers 的信息。很多新程序员都对这个话题有疑问。

【讨论】:

    【解决方案2】:

    这是一个由 32 个字符组成的字符串,是十六进制数字。这就是 16 个字节,或 128 个

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

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

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

    【讨论】:

    • 为什么 32 个字符是 16 个字节? ;-)
    • @guitarflow 32 十六进制数字 可以表示 16 个八位字节的信息。 (我敢肯定那是个麻烦 ;-)
    • 啊……当然,我以为你在谈论 C 字符串。该死的... ;-)
    • 但是我正在使用的函数需要一个 unsigned char 类型的参数,而不是 unsigned long long 类型的参数。请大家也检查这个链接。 stackoverflow.com/questions/10583023/…
    猜你喜欢
    • 2012-05-26
    • 2020-03-17
    • 2012-09-02
    • 1970-01-01
    • 2010-10-14
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多