【问题标题】:printf formattingprintf 格式化
【发布时间】:2010-10-06 13:26:55
【问题描述】:

我想使用printf0x### 的形式显示十六进制数字,但如果数字为0,我想省略0x 部分。

【问题讨论】:

    标签: c string printf


    【解决方案1】:
    printf("%#x", number);
    

    请注意,这正是您想要的。如果 number 的值为 0,则打印 0,否则以十六进制打印。示例:

    int x = 0;
    int y = 548548;
    
    printf("%#x %#x\n", x, y);
    

    结果:

    0 0x85ec4
    

    【讨论】:

    • 打印一个大写的 X;提问者要求使用小写的 X。我在乎;我喜欢 0xABCDEF0123 表示法。但那是我大惊小怪。也许用“x”代替“X”会安抚提问者。
    • 好的——够公平的。我说我是一个大惊小怪的人。我个人不喜欢这样一个事实,即为了获得我喜欢的符号(小写 0x,大写十六进制数字),我不能使用标准的 printf() 东西;我必须写 0x%08lX 或其他;如果没有 0x 部分,那将不会给出 0。
    • 另一方面,我发现如果值为零,我没有得到“0x”前缀,即使我通常要求使用 dang 前缀,这很烦人。如果我想让零成为特例,我会特例。再说一次,我觉得这不是一个特别大的刺激。
    【解决方案2】:
     printf ((x == 0) ? "%03x" : "0x%03x", x);
    

    【讨论】:

      【解决方案3】:

      难道您不能只使用 if 语句来检查数字是否为 0,然后确定您是否应该将其打印为 0x### 或仅打印 000(如果您正在寻找,则为 0)

      【讨论】:

        【解决方案4】:
        if (num == 0)
        {
             printf("0");
        }
        else
        {
             printf("%X", num);
        }
        

        【讨论】:

          【解决方案5】:

          为什么要这么难?

          如果数字 = 0 printf 没有格式化 别的 带格式的 printf

          【讨论】:

            猜你喜欢
            • 2019-07-01
            • 1970-01-01
            • 1970-01-01
            • 2019-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-19
            • 1970-01-01
            相关资源
            最近更新 更多