2010-08-14 75 views
1

我想使用一個命名爲C#IP地址控制的組件,但它有一個問題,我認爲。因爲當我增加它的價值1時,它給了我一些錯誤的結果。例如使用IP地址組件C#

ipAddressControl3.Text = "192.168.1.25"; 
IPAddress ipAddress1 = new IPAddress(ipAddressControl3.GetAddressBytes()); 
ipAddress1.Address++; 
MessageBox.Show(ipAddress1.ToString()); 

返回:「193.168.1.25」!但我期望「192.168.1.26」

有什麼問題?

這裏的組件鏈接:A C# IP Address Control

編輯:也許解決像this但我想不出來實現它..

+0

可能重複[如何使用IPAddress和IPv4Mask獲取IP地址範圍?](http://stackoverflow.com/questions/996848/how-to-use-ipaddress-and-ipv4mask-to-obtain-ip - 地址範圍) – 2010-08-14 10:37:59

回答

2

將我的IP大端到有點像這樣:

int ipaddress= IPAddress.NetworkToHostOrder(BitConverter.ToInt32(IPAddress.Parse(ipAddressControl3.Text).GetAddressBytes(), 0)); 

和它的工作。

1

IP地址存儲在網絡字節順序(big-endian)的,而在英特爾整數平臺是小端。

+0

嗯,我明白了,洙是什麼解決方案? – Rapunzo 2010-08-14 10:42:16

+0

那麼,只增加最後一個字節的快速入門就是用'+ = 0x1 << 24'替代'++'。 – 2010-08-14 10:44:51

+0

我嘗試過,但在這種情況下,它失敗了.. ıpAddressControl3.Text=「0.0.0.255」; IP地址ipAddress1 =新的IP地址(ıpAddressControl3.GetAddressBytes()); ipAddress1.Address + = 0x1 << 24; MessageBox.Show(ipAddress1.ToString()); resunt is:0.0.0.0 – Rapunzo 2010-08-14 10:59:00

1

試試這個:

ipAddressControl3.Text = "192.168.1.25"; 

byte[] ip = ipAddressControl3.GetAddressBytes(); 
ip[3] = (byte) (++ip[3]); 

IPAddress ipAddress1 = new IPAddress(ip); 
MessageBox.Show(ipAddress1.ToString()); 
+0

不幸的是,它給出0.0.0.0結果爲0.0.0.255 我預計它必須是0.0.1.0 – Rapunzo 2010-08-14 11:33:03