2016-11-03 67 views
0

我有一個v4 IP地址。我需要將其轉換爲UInt32。 在常規的.NET,我用的是:在.NET Core中將IP地址轉換爲UInt32/UInt64

string address = "192.168.1.1"; 
long intAddress = (long)(uint)IPAddress.NetworkToHostOrder((int)IPAddress.Parse(address).Address); 

但IPAddress.Address不是.NET提供的核心。 什麼是替代?

+0

因爲我對地理編碼已在UInt32的格式的IP地址表中的地址。 – user1054922

+0

@Quantic IPv4存儲爲4個字節。 uint存儲爲4個字節。叫我瘋了,但我認爲有一個直接的轉換。 – Abion47

+0

@ Abion47 dang此刻我只是充滿了糟糕的評論,你說得對。 – Quantic

回答

3

使用GetAddressBytes

var intAddress = BitConverter.ToInt32(IPAddress.Parse(address).GetAddressBytes(), 0);

另外: How to convert an IPv4 address into a integer in C#?

+0

使用這種方法我需要擔心大端/小端環境嗎? – user1054922

+1

我不這麼認爲。它看起來平臺獨立[在源代碼中](https://github.com/dotnet/corefx/blob/93bde6d2b0cc0797ffb0dca470836ac7f86f876d/src/System.Net.Primitives/src/System/Net/IPAddress.cs#L222-L246) –

+1

如果你將自己的價值存儲爲一個'UInt32',無論你使用什麼操作,endianness都是一個潛在的問題,但是如果這個值總是在.NET環境中使用,那麼它不應該成爲一個問題。但是,如果您擔心這個問題,最好將IP地址存儲爲字節數組(甚至只是一個字符串)。 – Abion47

0
var address = IPAddress.NetworkToHostOrder((int)BitConverter.ToUInt32(IPAddress.Parse(ipAddress).GetAddressBytes(), 0));