Ответ 1
Используя Google для поиска "Visual Studio printf unsigned __int64", вы получите эту страницу в качестве первого результата, в котором говорится, что вы можете использовать префикс I64
, поэтому спецификатор формата будет %I64u
.
Мне нужно напечатать значение ULONGLONG
(unsigned __int64
). Какой формат следует использовать в printf
?
Я нашел %llu
в другом вопросе, но они говорят, что это только для Linux.
Спасибо за вашу помощь.
Используя Google для поиска "Visual Studio printf unsigned __int64", вы получите эту страницу в качестве первого результата, в котором говорится, что вы можете использовать префикс I64
, поэтому спецификатор формата будет %I64u
.
%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.
Я рекомендую использовать 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;
}
Printf имеет разные спецификации формата для unsigned long long
в зависимости от компилятора, я видел %llu
и %Lu
. В общем, я бы посоветовал вам использовать std::cout
и подобное.
Вот работа для вывода HEX
printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));