问题是在一个平台上(windows,mvsc2015)uint64_t
被定义为unsigned long long
而另一个(ubuntu,clang)被定义为unsigned long
并且代码看起来像
sprintf(buffer, "%#llx", u64key);
答案 0 :(得分:10)
解决方案是使用C99的格式宏,特别是PRIu64
uint64_t
:
#include <inttypes.h>
…
sprintf(buffer, "%#" PRIu64 "\n", u64key);
答案 1 :(得分:4)
Pascal的解决方案对于这种特定类型来说是最直接和最惯用的,但是对于记录来说,打印任意整数类型的替代方法,其定义您不知道只是转换为intmax_t
或{{1}然后使用uintmax_t
修饰符(例如j
或%jd
)。然而,这可能不适用于大多数/所有版本的MSVC标准库实现,因为它们在标准一致性方面落后了。
答案 2 :(得分:-1)
您可以使用预处理程序指令来检测数据类型的定义方式,并使用不同的字符串编译另一个sprintf()。