2010-04-27 50 views
0

typedef unsigned long long IMSI;什麼格式說明符用於在C中打印「unsigned long long」並在控制檯上獲取截斷值?

IMSI imsi;

當我試圖打印這個使用%llu作爲格式說明符,我得到一個相當不相關的值。

我能做些什麼來消除這個問題?

我也用gcc 4.3.3 我雖然有可能是與我一直在使用的跟蹤機制出了問題,但我用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)); 

這給出以下輸出 UEC_IUH_ACCACHE_ENTRY_FOUND IMSI = 789731873,UeRegCause = 1,CurSize = 5 - >跟蹤 的printf:UEC_IUH_ACCACHE_ENTRY_FOUND = 789731873,的sizeof(IMSI)= 8 --->當用printf

也爲7位數的較小值我沒有得到任何問題。

+0

did y ou用非負數初始化它? – 2010-04-27 12:14:25

+0

你可以在最小程序上重新制作這個貼嗎? – 2010-04-27 12:46:47

回答

0

你沒有說你正在使用什麼操作系統或編譯器,並且你沒有發佈代碼,所以給出正確答案並不容易。儘管如此,我還是會試一試,並猜測您使用的MSVC版本不支持long long的標準printf格式說明符,因此您可能必須使用非標準的Microsoft替代版本%Lu才能獲得期望的結果。

爲了將來的參考,您應該發佈您的代碼,並提供足夠的細節供人回答。你使用的是什麼操作系統和編譯器。正如其他人已經指出,你也應該對你的接受率做一些事情。

2

您正在使用哪種編譯器?下面的程序

#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; 
} 

並得到所需要的輸出:

Value: 12345 
Value: 18446744073709551615 

在Linux上使用gcc 4.4.3

+0

我也得到了上面粘貼的程序相同的輸出。 其實我不直接使用printf。 我們有自己的追蹤機制,這可能是一個問題,我會檢查問題存在的地方,然後看看要做什麼。 非常感謝你們這樣的快速反應。 – Abhijeet 2010-04-27 12:24:22

2

這可能是一個問題:

imsiAsInt = 9379666465 ; 

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

嘗試9379666465ll

+1

+1假設它是32位整數,這肯定是一個問題。它應該是ULL,儘管類型是無符號的。 – 2010-04-27 13:37:24

相關問題