У меня есть код c(++), который использует sprintf для преобразования uint_64 в строку. Это должно быть переносимо как на 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 результат такой, как и ожидалось; на Солярисе 9 (не спрашивайте) это "28"
Что я могу использовать?