Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```C
- #include <iostream>
- #include <string>
- #include <string.h>
- #include <stdio.h>
- int main()
- {
- char* ptr = NULL;
- char ip_addr[]="1:2:3:4:ffff:ffff:1ff:fff6";
- int size = 0;
- char sIpv6AddrEnd[64] = {0,};
- unsigned int numberOfLease = 10;
- unsigned long long ipv6AddrStart = 0;
- unsigned long long ipv6AddrEnd = 0; // 64bit
- unsigned int ipv6AddrHextet;
- ptr = strtok(ip_addr, ":");
- /* Convert IPv6 address to unsigned long long */
- for (int nCount = 0 ; nCount < 7 ; nCount++)
- {
- ptr = strtok (NULL, ":");
- if (nCount >=3)
- {
- ipv6AddrHextet = strtoul (ptr, NULL, 16);
- ipv6AddrStart = (ipv6AddrStart << 16) + ipv6AddrHextet;
- }
- }
- ipv6AddrEnd = ipv6AddrStart + numberOfLease;
- /* Check over flow */
- if (ipv6AddrEnd < ipv6AddrStart)
- {
- std::cout << "\nError\n";
- }
- else
- {
- ipv6AddrHextet = ipv6AddrEnd >> 48;
- size += snprintf(sIpv6AddrEnd ,16, "%x", ipv6AddrHextet);
- ipv6AddrHextet = (ipv6AddrEnd << 16) >> 48;
- size += snprintf(sIpv6AddrEnd + size ,16, ":%x",ipv6AddrHextet);
- ipv6AddrHextet = (ipv6AddrEnd << 32) >> 48;
- size += snprintf(sIpv6AddrEnd + size ,16, ":%x", ipv6AddrHextet);
- ipv6AddrHextet = (ipv6AddrEnd << 48) >> 48;
- size += snprintf(sIpv6AddrEnd + size ,16, ":%x", ipv6AddrHextet);
- }
- std::cout << " sIpv6AddrEnd: " << sIpv6AddrEnd << "\n";
- return 0;
- }
- ```
Add Comment
Please, Sign In to add comment