Формат printf для неподписанных __int64 в Windows

Мне нужно напечатать значение ULONGLONG (unsigned __int64). Какой формат следует использовать в printf? Я нашел %llu в другом вопросе, но они говорят, что это только для Linux.

Спасибо за вашу помощь.

Ответы

Ответ 1

Используя Google для поиска "Visual Studio printf unsigned __int64", вы получите эту страницу в качестве первого результата, в котором говорится, что вы можете использовать префикс I64, поэтому спецификатор формата будет %I64u.

Ответ 2

%llu - стандартный способ печати unsigned long long, это не только для Linux, но и на C99. Поэтому на самом деле проблема заключается в использовании C99-совместимого компилятора, то есть не Visual Studio.

C99 7.19.6 Форматированные функции ввода/вывода

ll (ell-ell) Указывает, что следующий спецификатор преобразования d, i, o, u, x или X применяется к long long int или unsigned long long int аргумент; или что следующий указатель преобразования n применяется к указателю на длинный аргумент int.

Ответ 3

Я рекомендую использовать PRIu64 формат, указанный в стандартной библиотеке C. Он был разработан для предоставления пользователям спецификатора формата для неподписанного 64-битного целого в разных архитектурах.

Вот пример (в C, а не С++):

#include <stdint.h>   /* For uint64_t */
#include <inttypes.h> /* For PRIu64 */
#include <stdio.h>    /* For printf */
#include <stdlib.h>   /* For exit status */

int main()
{
    uint64_t n = 1986;
    printf("And the winning number is.... %" PRIu64 "!\n", n);
    return EXIT_SUCCESS;
}

Ответ 4

Printf имеет разные спецификации формата для unsigned long long в зависимости от компилятора, я видел %llu и %Lu. В общем, я бы посоветовал вам использовать std::cout и подобное.

Ответ 5

Вот работа для вывода HEX

printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));