Devo stampare un valore ULONGLONG
(unsigned __int64
). Quale formato dovrei usare in printf
? Ho trovato %llu
in un'altra domanda ma dicono che è solo per linux.formato printf per __int64 senza segno su Windows
Grazie per il vostro aiuto.
Devo stampare un valore ULONGLONG
(unsigned __int64
). Quale formato dovrei usare in printf
? Ho trovato %llu
in un'altra domanda ma dicono che è solo per linux.formato printf per __int64 senza segno su Windows
Grazie per il vostro aiuto.
Utilizzo di Google per la ricerca di “Visual Studio printf __int64 unsigned” produce this page come primo risultato, che dice che si può utilizzare il prefisso I64
, in modo che l'identificatore di formato sarebbe %I64u
.
Sembra funzionare. Grazie ! – Virus721
Un'altra scelta è la macro 'PRIu64' definita in' inttypes.h' –
@GrijeshChauhan: 'PRIu64' e' inttypes.h' non sono supportati in Visual Studio (almeno, non da Microsoft). –
Printf ha diversi identificatori di formato per unsigned long long
a seconda del compilatore, ho visto %llu
e %Lu
. In generale, consiglierei di usare std::cout
e simili.
La domanda è codificata sia "c" che "C++". In C, 'std :: cout' non è altro che un errore di sintassi. –
%llu
è il modo standard per stampare unsigned long long
, non è solo per Linux, è in realtà in C99. Quindi il problema è in realtà utilizzare un compilatore compatibile con C99, cioè non Visual Studio.
C99 funzioni 7.19.6 ingresso formattato/uscita
ll (ell-ell) Specifica che un seguito d, i, o, u, vale x, o conversione X specificatore di una lunga argomento int long long long o unsigned long long int; o che un identificatore della conversione n seguente si applica a un puntatore a lungo lungo l'argomento int.
Non mi preoccuperei di questo se potessi scegliere con quale software sto lavorando. – Virus721
Sfortunatamente, Microsoft non definisce un 'ULONGLONG' come un' unsigned long long'. Per [questa pagina] (http://msdn.microsoft.com/en-us/library/cc230393.aspx), è un 'unsigned __int64'.L'utilizzo di un formato per 'long long unsigned 'potrebbe o potrebbe non funzionare, ma, se si desidera che il codice sopravviva agli aggiornamenti del compilatore e alle migrazioni future, è necessario attenersi alle specifiche del tipo. –
@ Virus721 La tua domanda dice che devi usarlo in Windows, non dicendo Visual Studio. –
Si consiglia di utilizzare il formato PRIu64
specificato da una libreria C standard. È stato progettato per fornire agli utenti un identificatore di formato per numeri interi a 64 bit senza segno su diverse architetture.
Ecco un esempio (in C, C++ non):
#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;
}
Visual Studio non supporta 'stdint.h' o' inttypes.h'. Non supporta C 1999. Esistono [implementazioni di terze parti] (http://code.google.com/p/msinttypes/). –
@EricPostpischil: I ragazzi di Microsoft hanno perso completamente la testa? :( –
Grazie per il vostro aiuto, ma% I64d fa il lavoro – Virus721
Ecco un lavoro in giro per l'uscita HEX
printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));
Potete utilizzare std :: cout? Dovrebbe funzionare. –
Non posso. La funzione che uso è un wrapper con lista di argomenti variabili che usa printf e che non posso modificare. – Virus721
Leggi anche: [Una cosa divertente con sprintf] (http://stackoverflow.com/questions/17065203/a-funny-thing-with-sprintf/17065245#17065245) –