2010-01-31 50 views
0

值爲10240或2800(十六進制)。 TOTAL_LENGTH是未簽名的短片。 0028的十進制數是40,這是我所期望的(或至少是一個合理的數值)。[Windows]網絡到主機不工作

任何想法,爲什麼我得到0而不是40?想想自己倒過來的東西,但真的不想。 xD

unsigned short total_length = ntohl(ipData->TOTAL_LENGTH); 

這些是我包括的標題。

#include <winsock2.h> 
#include <ws2tcpip.h> 

回答

1
u_long WSAAPI ntohl(
    __in u_long netlong 
); 

結果是一個長期的,而你將其分配給短。檢查它是否沒有被切斷。

此外,如果它是一個短,那麼爲什麼你不使用ntohs

+0

因爲,我是個白癡。 xD謝謝! – bobber205 2010-01-31 23:19:23

0

嘗試ntohs。它是爲短褲而製造的。我猜測它有所不同,因爲他們爲不同類型的功能而煩惱。

0

結合Kornel的答案,您需要了解數據的存儲方式,最大的錯誤之一就是假設數據符合您的期望。不同的平臺,不同的處理器,關鍵字是endianess。一些存儲從高位到低位字節,其他存儲從低位到高位字節。這是使用'ntohs'和家人的唯一目的。請參閱Beej這個網絡編程站點的深入使用。

順便說一句,如果你說,你可以使用它作爲一個獨立的函數,處理來自不同平臺的具有不同字節的數據文件,你可以用它在處理之前將數據轉換爲右端的體系結構。它不會損害開銷並保證處理數據的成功。

希望這會有所幫助, 最好的問候, 湯姆。