将无符号整数转成IP地址
#include <iostream>
using namespace std;
void ipv4_to_str(char* addr_str, unsigned int ipv4_addr)
{
sprintf_s(addr_str, 20, "%d.%d.%d.%d",
(ipv4_addr >> 24) & 0xFF,
(ipv4_addr >> 16) & 0xFF,
(ipv4_addr >> 8) & 0xFF,
ipv4_addr & 0xFF
);
}
int main()
{
char str[20] = {0};
unsigned int ipv4 = (unsigned int)167773121;
ipv4_to_str(str, ipv4);
cout << str << endl;
return 0;
}
检验是否是合法的IP地址
#include <iostream>
using namespace std;
static int CountPoint(const char* str)
{
int count = 0;
while (*str != '\0')
{
if (*str == '.')
{
count++;
}
str++;
}
return count;
}
bool IsIP(const char* str)
{
if(str == NULL)
{
return false;
}
const char* p = NULL;
int num = 0;
if(CountPoint(str) != 3)
{
return false;
}
if (str[0] == '0')
{
return false;
}
while (*str != '\0')
{
if(isdigit(*str))
{
num = num * 10 + *str - '0';
}
else if (*str != '.' || num > 255)
{
return false;
}
else
{
num = 0;
}
str++;
}
if(num > 255)
{
return false;
}
return true;
}
int main()
{
char* strArr[] = {
"192.168.1.1",
"1.0.0",
"256.1.2.1",
"192.1.1.256",
"0.168.3.1",
"-3.127.4.1"
};
for (int i = 0; i < sizeof(strArr)/sizeof(strArr[0]); ++i)
{
if (IsIP(strArr[i]))
{
cout << strArr[i] << "是合法的IP" << endl;
}
else
{
cout << strArr[i] << "不是合法的IP" << endl;
}
}
return 0;
}
IP地址转成整数
#include <iostream>
using namespace std;
unsigned int ipv4_to_int(char* ipv4_addr)
{
char* str = ipv4_addr;
char* buff = NULL;
char* ptr = strtok_s(str, ".", &buff);
int arr[4] = {0};
int i = 0;
while (ptr != NULL)
{
sscanf_s(ptr, "%d", &arr[i]);
ptr = strtok_s(NULL, ".", &buff);
++i;
}
return (arr[0] << 24) + (arr[1] << 16) + (arr[2] << 8) + arr[3];
}
int main()
{
char str[20] = "10.0.3.193";
unsigned int res = ipv4_to_int(str);
cout << res << endl;
return 0;
}