【问题标题】:Printing leading zeroes for hexadecimal in C在 C 中打印十六进制的前导零
【发布时间】:2012-08-21 20:55:20
【问题描述】:

我正在尝试将 MD5 哈希的结果打印到控制台,并且它大部分都在工作。为了确保正确性,我使用了在线 MD5 计算器来比较结果。大多数字符是相同的,但我的中缺少一些字符,它们都是前导零。

让我解释一下。结果是一个 16 字节的 unsigned char *。我一一打印这些字节。每个字节在屏幕上打印两个字符。但是,如果这两个字符中的第一个字符是零,则它不会打印零。

printk("%x", result);

结果是 unsigned char* 类型。我的格式正确还是遗漏了什么?

【问题讨论】:

  • 它甚至与其他问题一点也不相似,因为其他问题 prohibits printf 系列函数而这个问题需要它。

标签: c linux formatting


【解决方案1】:

使用"%02x"

这两个意味着您总是希望输出为(至少)两个字符宽。

零表示如果需要填充,则使用零而不是空格。

【讨论】:

    【解决方案2】:

    result 是一个指针,使用循环打印所有数字:

    int i;
    for (i = 0; i < 16; i++) {
       printf("%02x", result[i]);
    }
    

    【讨论】:

    • 我不小心遗漏了我的帖子中的 [i]。感谢您指出这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2013-08-05
    • 2014-09-18
    相关资源
    最近更新 更多