c - sprintf 在 C 中前导零填充

标签 c printf

下面的代码打印ffffffffff

我需要输出长度为 16 位的 000000ffffffffff 并带有前导零。 var1var2 变量可以不同,因此我没有必要只填充 6 个零。我只需要输出前导零的 16 位数字。我应该如何进行?

#include <stdio.h>

int main() {
    int var1 = 1048575;
    int var2 = 1048575;

    char buffer[100];

    sprintf(buffer, "%x%x", var1, var2);
    printf("%s\n", buffer);

    return 0;
}

最佳答案

您可以分两步完成:

#include <stdio.h>

int main(void) {
    int var1 = 1048575;
    int var2 = 1048575;
    int length = 0;
    char buffer[100];
    char paddedbuffer[100] = "000000000000000";
    length = sprintf (buffer, "%x%x", var1, var2);
    char* here = length < 16 ? paddedbuffer + 16 - length : paddedbuffer;
    sprintf(here, "%s", buffer);
    printf("%s\n", paddedbuffer);
    return 0;
}

某处可能有更优雅的解决方案。

另一种可能性是将您的结果转换为整数,然后sprintf使用字段宽度对其进行处理,或者首先计算最右边数字的实际位数。

关于c - sprintf 在 C 中前导零填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34703806/

相关文章:

c++ - 为什么有人会使用 C 而不是 C++?

c - 将图像放置在固定布局 GTK2 中

c - 消除前导零,同时仍保持正确对齐

将链表转换为队列(移动节点)

从 RTSP MJPEG 流构建 JPEG 图像

c - C 程序中使用 Malloc 和 for 循环出现意外结果

c - 在 C 中打印长度为 char 的缓冲区

java - 为什么 String 的 format(Object... args) 被定义为静态方法?

c - 仅基于 printf 语句的程序段错误

c - 字符串存储到共享内存后无法正常显示