2016-08-13 51 views
0

我試圖從-1到99999999我曾嘗試與snprintf的命令使用中的snprintf一個長整型不會去了65K

long position = 0; // defined elsewhere in the program 

long micronPerStep = 5; 
long adjustedPosition = (position/micronsPerStep) * 25; 
char txt[17]; 

int n = snprintf(txt,16,"%09u  ",adjustedPosition); 

的adjustedPosition範圍將格式化和顯示零填充長整型d和u,但是這個數字在大約65,xxx處變成負值。我究竟做錯了什麼???

+0

你使用的是什麼版本的c編譯器? 32位,64位,16位也許?我會說檢查編譯器的snprintf()格式字符串的文檔。 %u是什麼?也許試試%lu,%d或%ld。 –

+0

我使用的是arduino環境,所以不太確定C++的版本是什麼。 –

回答

2

%u是打印的格式代碼unsigned int

如果您想打印unsigned long,您需要%lu

+0

P.S.我認爲,從技術上講,該標準只允許你使用'%lu'打印'unsigned long',而不是'long'。但是,如果有任何環境會使你保持技術性,我會感到驚訝。 – Hurkyl

+0

我試過unsigned long,但結果相同。我使用%09u而不是%1u,因爲我需要零填充左邊的九位數。 –

+0

對不起,我的眼睛不太好,所以我錯過了你建議的%lu而不是%1u。我會嘗試。 –