【问题标题】:How to Right Pad a Hexadecimal in C如何在 C 中正确填充十六进制
【发布时间】:2015-03-30 02:51:52
【问题描述】:

所以我知道(经过大量令人困惑的谷歌搜索)要正确填充字符串,可以使用 fprintf("%-10s", string) 或类似的东西来填充最长 10 个长度的空格。

所以我有两个问题:

我知道 left-pad 是类似的,但它的语法是什么? (对不起,我谷歌了,但被相互矛盾的答案弄糊涂了......)

更重要的是,我如何右填充十六进制?假设我有一个整数,我想用 %02X 转换为十六进制。我还能使用 %-1002X 吗?那岂不是搞砸了?

【问题讨论】:

  • 你为什么不试试这个?
  • 我还没有完成编码,所以它不会编译。我认为它不会起作用 - 很明显它不会起作用,只需查看语法即可。

标签: c


【解决方案1】:

printf 转换格式允许您在左填充或右填充转换结果,但不能同时使用两者。右填充整数转换与右填充其他任何内容相同 - 只需指定负字段宽度,如%-10x。您不能同时使用 left-pad 和 right-pad:您只能在格式中指定一个 width。您原来的 %02x 已经明确使用左填充。您不能在此之上添加右填充。

但是,您的 %02x 的目的似乎是产生至少有 2 位数字的零填充输出。这可以通过使用格式的 precision 组件而不是使用 width 来实现。像%.2x 这样的格式也能成功产生2位十六进制转换。

通过使用精度而不是宽度,您可以将宽度用于填充目的。例如。像 %-10.2x 这样的格式将产生 2 位转换(用零填充),用空格填充到 10 个字符。

【讨论】:

    【解决方案2】:

    试试

    printf("Hex %8.8x", someInt);
    

    或使用fprintf()sprintf()snprintf() 等等...如果您以十六进制字符串开头,请使用带有%-8s 格式说明符的 snprintf()将翻译捕获到 char * 缓冲区中,然后使用 for 循环或用“0”字符替换空格。

    【讨论】:

    • 谢谢!我知道我可以使用 for 循环,但我有点希望在一行中完成……如果这不可能,我可能会使用 for 循环。
    • 或者您可以使用scanf() sscan()"%x" 将您的十六进制字符串转换为int,然后使用"%8.8x" 将其打印出来,如上所示。
    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 2017-06-08
    • 2011-03-11
    • 2021-11-13
    • 2011-06-01
    • 1970-01-01
    • 2011-12-09
    • 2015-02-14
    相关资源
    最近更新 更多