Да, IP-адреса меняются. Такова природа большинства жилых интернет-соединений. Только сравнительно небольшое количество соединений имеют статические IP-адреса. IP-адреса являются деталями реализации механизма маршрутизации данных, они не являются постоянными или уникальными идентификаторами.
Если Вы имеете, имеют inttypes.h доступный, можно использовать макросы, которые это обеспечивает:
printf( "%" PRIu64 "\n", val);
Не симпатичный (я, кажется, говорю, что много недавно), но это работает.
В совместимой системе C99:
#include <inttypes.h>
uint64_t big = ...;
printf("%" PRIu64 "\n", big);
Посмотрите раздел 7.8 из стандарта C99.
Спецификаторами является {PRI, SCN} [diouxX] {N, LEASTN, МАКС, FASTN, PTR}
Где PRI является для printf () семейством, SCN является для scanf () семейством, d и мной для целочисленных типов со знаком; o, u, x, X для неподписанных целочисленных типов как восьмеричные, десятичные, шестнадцатеричные, и Шестнадцатеричные; N является одной из поддерживаемых ширин; НАИМЕНЬШЕЕ и FAST соответствуют тем модификаторам; PTR для intptr_t; и МАКС для intmax_t.
Можно использовать %llu
долгое время долго. Однако это не очень портативно также, потому что long long
как гарантируют, не будет 64 бита.:-)
Можно добраться uint64_t
от stdint.h
если Вы хотите избежать условного определения типа SunOS.
Ответ зависит от того, является ли Ваш код на самом деле C или C++. В C необходимо использовать unsigned long long
вместо другого типа (это совместимо к текущему стандарту, и long long
довольно распространено насколько поддержка C99 идет), добавляя ULL
вместо L
к Вашей константе, и использующий (как был упомянут), %llu
как Ваш спецификатор. Если поддержка C99 не существует, можно хотеть проверить документацию компилятора, поскольку нет никакого другого стандартного способа сделать это. long long
guarateed должен составить 64 бита, по крайней мере.