Each IP address is a numeric representation of a 32 bit number, which is normally how it is retrieved from a PLC or digital drive.
In this example: 16.1.206.254 ==0x1001CEFE because:
16 | 10 |
1 | 01 |
206 | CE |
254 | FE |
There are two methods to extract the IP address from an integer:
Method 1:
UInt32 iIP = 0x1001CEFE; arDrives[i].lNodeIP = Convert.ToInt32(iIP) sMsg = string.Format(" IP: {0}.{1}.{2}.{3}", (arDrives[i].lNodeIP >> 24) & 0xFF, (arDrives[i].lNodeIP >> 16) & 0xFF, (arDrives[i].lNodeIP >> 8) & 0xFF, arDrives[i].lNodeIP & 0xFF); Console.WriteLine(sMsg);
Method 2:
public void GetAddr(Int32 lAddr, ref Int32[] ip) { ip[3] = (lAddr / 0x1000000); ip[2] = (lAddr / 0x10000) % 0x100; ip[1] = (lAddr / 0x100) % 0x100; ip[0] = (lAddr % 0x100); } ts.GetAddr(arDrives[i].lNodeIP, ref ip) sMsg = string.Format(" IP: {0}.{1}.{2}.{3}", ip[3], ip[2], ip[1], ip[0]); Console.WriteLine(sMsg);