PRIu128的行为是否与<inttypes.h>中的PRIu64相似:

printf("%" PRIu64 "\n", some_uint64_value);

或手动逐位转换:

int print_uint128(uint128_t n) {
  if (n == 0)  return printf("0\n");

  char str[40] = {0}; // log10(1 << 128) + '\0'
  char *s = str + sizeof(str) - 1; // start at the end
  while (n != 0) {
    if (s == str) return -1; // never happens

    *--s = "0123456789"[n % 10]; // save last digit
    n /= 10;                     // drop it
  }
  return printf("%s\n", s);
}

这是唯一的 Select 吗?

请注意,uint128_t是我自己的__uint128_t类型定义函数.

推荐答案

不,库中不支持打印这些类型.它们甚至不是C标准意义上的扩展整数类型.

你从背面开始打印的 idea 很好,但是你可以使用更大的块.在P99的一些测试中,我有这样一个函数

uint64_t const d19 = UINT64_C(10000000000000000000);

作为10的最大幂,可以容纳uint64_t.

以十进制表示,这些大数字很快就无法读取,因此另一个更简单的 Select 是在祸不单行中打印它们.然后你可以做一些像这样的事情

  uint64_t low = (uint64_t)x;
  // This is UINT64_MAX, the largest number in 64 bit
  // so the longest string that the lower half can occupy
  char buf[] = { "18446744073709551615" };
  sprintf(buf, "%" PRIX64, low);

得到下半部分,然后基本上与

  uint64_t high = (x >> 64);

上半部分.

C++相关问答推荐

有什么方法可以从Linux中未剥离的二进制文件中取回源代码吗?

为什么PLT表中没有push指令?

GCC不警告隐式指针到整数转换'

从纯C中访问通用项对话框

Clang:如何强制运行时错误的崩溃/异常由于-fsanitize=undefined

当我更改编译优化时,相同的C代码以不同的方式运行

为什么STM32G474RE上没有启用RCC PLL

使用双指针动态分配和初始化2D数组

在C++中使用函数指针的正确语法

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

在WSL关闭/重新启动后,是什么原因导致共享对象依赖关系发生更改?

是否需要包括<;errno.h>;才能使用perror?

变量的作用域是否在C中的循环未定义行为或实现定义行为的参数中初始化?

C堆栈(使用动态数组)realloc内存泄漏问题

从不兼容的指针类型返回&&警告,但我看不出原因

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

函数的typedef是标准 C 语法吗?它与函数指针的typedef有何不同?

(GNU+Linux) 多个线程同时调用malloc()

在 C/C++ 中原子按位与字节的最佳方法?