32-bit Unsigned Integer to IPv4 Components
- byte ipv4Addr_octet1(uint uintIpAddress) – Isolate the 1st octet of a 32-bit Integer
- byte ipv4Addr_octet2(uint uintIpAddress) – Isolate the 2nd octet of a 32-bit Integer
- byte ipv4Addr_octet3(uint uintIpAddress) – Isolate the 3rd octet of a 32-bit Integer
- byte ipv4Addr_octet4(uint uintIpAddress) – Isolate the 4th octet of a 32-bit Integer
- string uintToString(uint uintIpAddress) – Convert 32-bit Integer to Dot-Notation
Network Manipulation Functions
- uint ipv4_network(uint uintIpAddress, uint uintMaskLength) – Finds network based on address and Mask
IPv4 Components to 32-bit Unsigned Integer:
Note using Excel string functions to isolate octets: LEFT(string,length) MID(string,start,length) LEN(string)
ipv4Octet_Addr(char* strIpAddress) =
(
MIN(
MAX(
INT(
MID( strIpAddress,
FIND(".",
strIpAddress,
FIND(".",
strIpAddress,
FIND(".", strIpAddress ) + 1
) + 1
) + 1,
3
)
),
0
),
255
) + (
MIN(
MAX(INT(
MID( strIpAddress,
FIND(".",
strIpAddress,
FIND(".", strIpAddress ) + 1
) + 1,
FIND(".",
strIpAddress,
FIND(".",
strIpAddress,
FIND(".", strIpAddress ) + 1
) + 1
) -
(
FIND(".",
strIpAddress,
FIND(".", strIpAddress ) + 1
) + 1
)
)
),0)
,255
) * 256
) + (
MIN(
MAX(
INT(
MID(
strIpAddress,
FIND(".", strIpAddress ) + 1,
FIND(".",
strIpAddress,
FIND(".", strIpAddress ) + 1
) - (FIND(".", strIpAddress ) + 1)
)
),
0
),
255
) * 65535
) + (
MIN(
MAX(
INT(
LEFT( strIpAddress, FIND(".", strIpAddress ))
),
0
),
255
) * 2^24
)
)
Where:
strIpAddress = 10.73.64.128
result: 172572800
32-bit Unsigned Integer to IPv4 Components: (Octet1.Octet2.Octet3.Octet4)
Note that (^) represents raising the left numeral to the right power and INT(fn(..)) is being used to round off the decimal.
Isolate the 1st octet of a 32-bit Integer:
ipv4Addr_octet1(uint uintIpAddress) = INT(uintIpAddress / 16777216) Where: uintIpAddress = 172572800 result: 10
Isolate the 2nd octet of a 32-bit Integer:
ipv4Addr_octet2(uint uintIpAddress) = INT( (uintIpAddress - INT(uintIpAddress / 16777216)*16777216)/65536 ) Where: uintIpAddress = 172572800 result: 73
Isolate the 3rd octet of a 32-bit Integer:
ipv4Addr_octet3(uint uintIpAddress) =
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216) * 16777216 -
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216
) / 65536
) * 65536
) / 256
)
Where:
uintIpAddress = 172572800
result: 64
Isolate the 4th octet of a 32-bit Integer:
ipv4Addr_octet4(uint uintIpAddress) =
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216 -
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216
) / 65536
) * 65536 - INT(
(
H:H -
INT(uintIpAddress/16777216)*16777216 -
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216
)/65536
) * 65536
) / 256
) * 256
)
Where:
uintIpAddress = 172572800
result: 128
IP Address in Dot-Notation
Combines the previous Octet Isolation functions into a single function resulting in a String Dot-Notation
uintToString(uint uintIpAddress) =
INT(uintIpAddress / 16777216) & "." &
INT(
(
uintIpAddress -
INT(uintIpAddress / 16777216)*16777216
) / 65536
) & "." &
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216 -
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216
) / 65536
) * 65536
) / 256
) & "." &
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216 -
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216
) / 65536
) * 65536 -
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216 -
INT(
(
uintIpAddress -
INT(uintIpAddress/16777216)*16777216
) / 65536
) * 65536
) / 256
) * 256
)
Where:
uintIpAddress = 172572800
result: “10.73.64.128”
IPv4 Network Segment Manipulation Functions:
Note that (^) represents raising the left numeral to the right power and INT(fn(..)) is being used to round off the decimal.
IPv4 Network Isolation
Effectively, we’re doing a bitwise right shift 15 positions (integer division) and a left shift 15 positions (multiplication) to emulate an XOR.
uint ipv4_network(uint uintIpAddress, uint uintMaskLength) = INT(uintIpAddress / 2^(32 - uintMaskLength)) * 2^(32 - uintMaskLength) Where: uintIpAddress = 172572800 uintMaskLength = 17 result: 172556288 (10.73.0.0)