c++ - permanentemente - windows no puede comprobar la firma digital de este archivo windows 7
Formato de printf para__int64 sin firmar en Windows (5)
Aquí hay una solución para la salida HEX
printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));
Necesito imprimir un valor ULONGLONG
( unsigned __int64
). ¿Qué formato debo usar en printf
? Encontré %llu
en otra pregunta pero dicen que es solo para Linux.
Gracias por tu ayuda.
El uso de Google para buscar "Visual Studio printf unsigned __int64" produce esta página como primer resultado, lo que indica que puede usar el prefijo I64
, por lo que el especificador de formato sería %I64u
.
Le recomiendo que use el formato PRIu64
especificado de una biblioteca C estándar. Fue diseñado para proporcionar a los usuarios un especificador de formato para enteros de 64 bits sin signo en diferentes arquitecturas.
Aquí hay un ejemplo (en C, no en 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 tiene diferentes especificadores de formato para unsigned long long
dependiendo del compilador, he visto %llu
y %Lu
. En general, le aconsejaría que use std::cout
y similar en su lugar.
%llu
es la forma estándar de imprimir unsigned long long
, no es solo para Linux, en realidad está en C99. Por lo tanto, el problema es utilizar un compilador compatible con C99, es decir, no Visual Studio.
C99 7.19.6 Funciones de entrada / salida formateadas
ll (ell-ell) Especifica que el siguiente especificador de conversión d, i, o, u, x, o X se aplica a un argumento long long int o unsigned long long int; o que un siguiente especificador de conversión se aplique a un puntero a lo largo del argumento int largo.