2013-08-27 139 views
-2

如何重組TCP數據包根據TCP標誌值重新組裝的TCP數據包標誌的值意味着這是數據包的最後一部分?取決於標誌

+2

如果你想打印浮點數,你需要使用%f。 %d在這裏是錯誤的。 – fuz

+1

到目前爲止,您採取了哪些步驟進行調試?你有沒有讀過'printf'的參考頁?你有沒有在調試器中檢查你的代碼?你有沒有打開所有的編譯器警告? – abelenky

回答

1

你不能簡單地重新組合的TCP數據包,因爲其標誌沒有more bitDon't fragment bit IP數據包是具有這樣的標誌只有一個,所以你只能使用標誌重新組裝IP包:

「不分段」位。當這個位被設置時,IP數據報永遠不會被分割,而如果出現片段需求則丟棄它。第三位表示「更多碎片」位。如果這個位被設置,那麼它表示一個碎片化的IP數據報,其後面有更多的碎片。在IP數據報的最後一個片段的情況下,該位未被設置,表示這是特定IP數據報的最後一個片段。

2

因爲%d不是double的格式說明符,所以它適用於int。您應該使用正確的格式字符串,例如%f

5

因爲您使用的是%d,這是用於十進制整數,而不是%f%g用於雙打。

2

查找printf format specifiers%d用於整數值。你想要的可能是%f%e%g或類似。看看這個例子:

實施例:

#include <stdio.h> 

int main() { 
    double x = 3.141; 
    printf("%d\n", x); 
    printf("%e\n", x); 
    printf("%f\n", x); 
    printf("%g\n", x); 
} 

的輸出是:

$ gcc test.c && /a.out 
154573528 
3.141000e+00 
3.141000 
3.141 

注意printf固有類型不安全。在上面的例子中,你會發現使用整數格式說明符的輸出與其他的完全不同。這是因爲沒有執行轉換,但字節模式被直接解釋爲另一種類型,因此可能導致無效的存儲器訪問。

免責聲明:請注意,使用printf然後使用鏈鋸危險性較低。但是,如果你不在乎手握什麼結局,哪一個指向你想砍的木頭,你的里程可能會有所不同。因此,您應該仔細查看所使用功能的文檔。

參考:

+1

如果你遵守規則,這不是不安全的類型。如果你不知道如何使用它們,鏈鋸也是危險的,但是如果你這樣做,沒有更好的方法來快速切割木材:-) – paxdiablo

+1

@paxdiablo它的設計不安全。當然,您必須遵守規則才能正確使用它。 – moooeeeep

2

指定 「%d」 的格式定義的整數NOT雙變量。

使用「%e」或「%g」。

1

可能已經有人說過,但因爲你聲明的數組變量爲雙數據類型,你不能全部使用%d是一個整數數據類型它突然絕版。因此,我會使用%f或%lf來打印它。上述應更好地工作,如果你正在處理雙倍的數據類型