【问题标题】:unsigned long long type printing in hexadecimal format以十六进制格式打印 unsigned long long 类型
【发布时间】:2013-10-17 13:49:56
【问题描述】:

我正在尝试像这样打印出unsigned long long

  printf("Hex add is: 0x%ux ", hexAdd);

但我收到了类型转换错误,因为我有一个 unsigned long long

【问题讨论】:

  • 对于您要查找的特定格式,带有0x 前缀,请使用"0x%llx"
  • @Joseph 这不是该问题的完美副本。在这里,OP 想要以十六进制格式输出,而不是十进制格式。
  • 当然,Lorenzo,现在您已经编辑了问题以提供信息,OP 在被问到时没有说清楚。

标签: c integer printf


【解决方案1】:

我在使用 MinGW 库时遇到了类似的问题。我无法让它识别 %llu 或 %llx 的东西。

这是我的答案...

void PutValue64(uint64_t value) {
char    a_string[25];   // 16 for the hex data, 2 for the 0x, 1 for the term, and some spare
uint32  MSB_part;
uint32  LSB_part;

    MSB_part = value >> 32;
    LSB_part= value & 0x00000000FFFFFFFF;

    printf(a_string, "0x%04x%08x", MSB_part, LSB_part);
}

注意,我认为 %04x 可以简单地为 %x,但 %08x 是必需的。

祝你好运。 标记

【讨论】:

    【解决方案2】:

    试试%llu - 这将是十进制形式的 long long unsigned

    %llx 以十六进制打印 long long unsigned

    【讨论】:

    • 但是printf("%llu\n", (long long unsigned int) 243); 打印243,这是十进制,而不是十六进制; printf("%llx\n", (long long unsigned int) 243); 以十六进制打印 f3
    【解决方案3】:

    您可以对%x 使用相同的ll 大小修饰符,因此:

    #include <stdio.h>
    
    int main() {
        unsigned long long x = 123456789012345ULL;
        printf("%llx\n", x);
        return 0;
    }
    

    完整范围的转换和格式说明符都在一个很棒的表格中:

    【讨论】:

      【解决方案4】:
      printf("Hex add is: %llu", hexAdd);
      

      【讨论】:

      • 但我想要它的十六进制版本,因此首先使用 x 的原因。
      • 在这种情况下,请使用%llx,但我假设您的第二条评论已经知道了。
      猜你喜欢
      • 2012-09-11
      • 2015-06-13
      • 2020-05-14
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2012-05-26
      • 1970-01-01
      相关资源
      最近更新 更多