好的,以下是使用纯C++实现的代码:
#include <iostream>
#include <sstream>
#include <bitset>
// 将IPv4地址字符串转换为无符号整数
unsigned int parseIPv4Address(const std::string& ipAddress)
{
unsigned int result = 0;
std::istringstream iss(ipAddress);
std::string token;
while (std::getline(iss, token, '.'))
{
result = (result << 8) + std::stoi(token);
}
return result;
}
// 将无符号整数转换为IPv4地址字符串
std::string toIPv4Address(unsigned int address)
{
std::stringstream ss;
ss << ((address >> 24) & 0xFF) << '.'
<< ((address >> 16) & 0xFF) << '.'
<< ((address >> 8) & 0xFF) << '.'
<< (address & 0xFF);
return ss.str();
}
void calculateValidAddresses(const std::string& networkAddress, const std::string& subnetMask)
{
unsigned int network = parseIPv4Address(networkAddress);
unsigned int mask = parseIPv4Address(subnetMask);
// 获取子网掩码的反码
unsigned int invertedMask = ~mask;
// 计算第一个有效地址
unsigned int firstValid = (network & mask) + 1;
// 计算最后一个有效地址
unsigned int lastValid = (network | invertedMask) - 1;
std::cout << "第一个有效地址:" << toIPv4Address(firstValid) << std::endl;
std::cout << "最后一个有效地址:" << toIPv4Address(lastValid) << std::endl;
}
int main()
{
std::string networkAddress = "192.168.0.0"; // 示例网络地址
std::string subnetMask = "255.255.255.0"; // 示例子网掩码
calculateValidAddresses(networkAddress, subnetMask);
return 0;
}
这段代码使用了纯C++的标准库,包括 <iostream>
、<sstream>
和 <bitset>
来实现对IP地址和子网掩码的处理。函数 parseIPv4Address
将IPv4地址字符串解析为无符号整数,函数 toIPv4Address
则将无符号整数转换回字符串形式的IP地址。
在主函数中调用了 calculateValidAddresses
函数来计算第一个和最后一个有效地址,并通过 std::cout
输出结果。
请注意,在使用该代码时,确保正确设置编译器的 C++11 标准或更高版本。
内容由零声教学AI助手提供,问题来源于学员提问