2010-03-10 61 views

回答

37

IPAddress.HostToNetworkOrder and IPAddress.NetworkToHostOrder

每種方法都有16位,32位和64位整數的重載。

+0

我假設這兩種方法做同樣的事情。我注意到重載只適用於簽名的東西。他們在未簽名的東西上安全嗎? – pm100

+0

@ pm100:你會期望他們是自我反向的,是的。我不希望聲稱絕對的事實,雖然:)不知道你的意思是「安全的無符號的東西」 - 你必須先施放,在這一點上,它不會被無符號... –

+1

第一 - 因爲他們工作的很多東西都是IP地址這些未簽名的事情,令人驚訝的是uint32沒有重載等等。'安全'我的意思是我對鑄造簽名爲無符號,小心擺弄位和通常這是一個符號傳播/截斷的配方,...... wiednesses – pm100

0

@jon-skeet's answer是根據您的問題最準確。然而,'ntoh_'和'hton_'C函數被廣泛用於翻譯​​。

如果你的目的是進行字節序轉換,有一個BitConverter class(核心組件的靜態類),爲您帶來一個更合適的方式。特別是當:

  • 使用字節數組(廣泛用於文件或網絡流)。
  • Detecting endianess運行機器的體系結構。
  • 將基本結構轉換爲整數(布爾值,小數)而不使用類型轉換。
  • 您的代碼與網絡操作(System.Net命名空間)無關。
+4

,只是該類不具有與htonl等效的功能。我必須得到字節,反轉它們,然後轉換回 – pm100

+1

'BitConverter'不支持任何非本地字節序。 (至少內置的不是,Jon或Marc做出了更強大的功能 - 但是製作垃圾臨時陣列仍然是浪費) –