我有一些使用 sprintf 将 uint_64 转换为字符串的 c(++) 代码。这需要可移植到 linux 和 Solaris。
在 linux 上我们使用 %ju,但在 Solaris 上似乎没有任何等价物。我能找到的最接近的是 %lu,但这会产生不正确的输出。一些示例代码:
#include <stdio.h>
#include <sys/types.h>
#ifdef SunOS
typedef uint64_t u_int64_t;
#endif
int main(int argc, char **argv) {
u_int64_t val = 123456789123L;
#ifdef SunOS
printf("%lu\n", val);
#else
printf("%ju\n", val);
#endif
}
在linux上,输出如预期;在 Solaris 9 上(不要问),它是“28”
我可以使用什么?