3

问题是在一个平台(windows,mvsc2015)uint64_t上定义为unsigned long long,而在另一个平台(ubuntu,clang)上,它的unsigned long代码看起来像 sprintf(buffer, "%#llx", u64key);

4

3 回答 3

10

解决方案是使用 C99 的格式宏,特别是PRIu64对于uint64_t

#include <inttypes.h>
…
sprintf(buffer, "%#" PRIu64 "\n", u64key);
于 2015-07-26T22:24:19.653 回答
4

对于这种特定类型,Pascal 的解决方案是最直接和最惯用的,但为了记录,打印您不知道其定义的任意整数类型的替代方法是简单地转换为intmax_tuintmax_t然后使用j修饰符(例如%jdor %ju)。然而,这可能不适用于大多数/所有版本的 MSVC 标准库实现,因为它们在标准一致性方面落后了很多。

于 2015-07-26T22:27:40.843 回答
-1

您可以使用预处理器指令来检测数据类型的定义方式并使用不同的字符串编译另一个 sprintf()。

于 2015-07-26T22:31:32.053 回答