2010-04-27 4 views
0

typedef unsigned long long IMSI;Quel spécificateur de format utiliser pour imprimer "unsigned long long" en C avec des valeurs tronquées sur la console?

IMSI imsi; Lorsque j'essaye d'imprimer ceci en utilisant% llu comme spécificateur de format, je reçois une valeur sans rapport.

Que puis-je faire pour résoudre ce problème?

J'utilise aussi gcc 4.3.3 Je pense qu'il y a peut-être un problème avec le mécanisme de traçage que j'ai utilisé, mais j'obtiens le même problème même en utilisant printf.

imsiAsInt = 9379666465 ; 
    brrm_trace(ubm_TRACE_BRRM_UECTRL,ubm_TRACE_INFO, 
       UEC_IUH_ACCACHE_ENTRY_FOUND,imsiAsInt, status.ueRegCause, 
       mCacheEntries.size()); 
    printf("printf:UEC_IUH_ACCACHE_ENTRY_FOUND=%llu, sizeof(IMSI)=%d\n", 
      imsiAsInt,sizeof(IMSI)); 

Cela donne suite à la sortie UEC_IUH_ACCACHE_ENTRY_FOUND Imsi = 789731873, UeRegCause = 1, CurSize = 5 -> La trace printf: UEC_IUH_ACCACHE_ENTRY_FOUND = 789731873, sizeof (IMSI) = 8 ---> lors de l'utilisation printf

Aussi pour les petites valeurs à 7 chiffres, je n'ai aucun problème.

+0

avez-vous ou l'initialiser avec un nombre non négatif? –

+0

Pouvez-vous le repro sur un programme minimal et le coller? –

Répondre

0

Vous n'avez pas indiqué le système d'exploitation ou le compilateur que vous utilisez et vous n'avez pas publié le code, il n'est donc pas facile de donner une réponse correcte. Je vais tenter ma chance et deviner que vous utilisez une ancienne version de MSVC qui ne prend pas en charge les spécificateurs de format printf standard pour long long et vous devrez donc utiliser l'alternative Microsoft non standard de %Lu pour obtenir le résultat souhaité.

Pour référence future, vous devez publier votre code et donner suffisamment de détails pour que les personnes puissent y répondre, par ex. quel OS et compilateur vous utilisez. Comme d'autres l'ont noté, vous devriez également faire quelque chose au sujet de votre taux d'acceptation.

2

Quel compilateur utilisez-vous? Le programme suivant

#include <stdio.h> 
int main() 
{ 
    unsigned long long x; 

    x = 12345; 
    printf("Value: %llu\n", x); 

    x = -1; 
    printf("Value: %llu\n", x); 

    return 0; 
} 

ne donne le résultat attendu:

Value: 12345 
Value: 18446744073709551615 

sur Linux avec gcc 4.4.3

+0

Je reçois également la même sortie pour le programme collé ci-dessus. En fait, je n'utilise pas printf directement. Nous avons notre propre mécanisme de traçage et cela pourrait bien être un problème avec cela. Je vais vérifier où le problème existe et ensuite voir ce qu'il faut faire. Merci beaucoup les gars pour une réponse si rapide. – Abhijeet

2

Cela pourrait être un problème:

imsiAsInt = 9379666465 ; 

[Warning] integer constant is too large for 'long' type 

Essayez 9379666465ll

+1

+1 en supposant que ce soit des entiers 32 bits, c'est définitivement un problème. Il devrait être ULL bien que le type est non signé. –

Questions connexes