Guest User

Untitled

a guest
May 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. ```C
  2. #include <iostream>
  3. #include <string>
  4. #include <string.h>
  5. #include <stdio.h>
  6.  
  7. int main()
  8. {
  9. char* ptr = NULL;
  10. char ip_addr[]="1:2:3:4:ffff:ffff:1ff:fff6";
  11. int size = 0;
  12. char sIpv6AddrEnd[64] = {0,};
  13.  
  14. unsigned int numberOfLease = 10;
  15.  
  16. unsigned long long ipv6AddrStart = 0;
  17. unsigned long long ipv6AddrEnd = 0; // 64bit
  18. unsigned int ipv6AddrHextet;
  19.  
  20. ptr = strtok(ip_addr, ":");
  21.  
  22. /* Convert IPv6 address to unsigned long long */
  23. for (int nCount = 0 ; nCount < 7 ; nCount++)
  24. {
  25. ptr = strtok (NULL, ":");
  26. if (nCount >=3)
  27. {
  28. ipv6AddrHextet = strtoul (ptr, NULL, 16);
  29. ipv6AddrStart = (ipv6AddrStart << 16) + ipv6AddrHextet;
  30. }
  31. }
  32.  
  33. ipv6AddrEnd = ipv6AddrStart + numberOfLease;
  34. /* Check over flow */
  35. if (ipv6AddrEnd < ipv6AddrStart)
  36. {
  37. std::cout << "\nError\n";
  38. }
  39. else
  40. {
  41. ipv6AddrHextet = ipv6AddrEnd >> 48;
  42. size += snprintf(sIpv6AddrEnd ,16, "%x", ipv6AddrHextet);
  43. ipv6AddrHextet = (ipv6AddrEnd << 16) >> 48;
  44. size += snprintf(sIpv6AddrEnd + size ,16, ":%x",ipv6AddrHextet);
  45. ipv6AddrHextet = (ipv6AddrEnd << 32) >> 48;
  46. size += snprintf(sIpv6AddrEnd + size ,16, ":%x", ipv6AddrHextet);
  47. ipv6AddrHextet = (ipv6AddrEnd << 48) >> 48;
  48. size += snprintf(sIpv6AddrEnd + size ,16, ":%x", ipv6AddrHextet);
  49. }
  50.  
  51. std::cout << " sIpv6AddrEnd: " << sIpv6AddrEnd << "\n";
  52. return 0;
  53. }
  54. ```
Add Comment
Please, Sign In to add comment