gpt4 book ai didi

c++ - 将字符串转换为 IP 地址时输出错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:19 26 4
gpt4 key购买 nike

我正在尝试将字符串转换为 IP 地址。输入字符串是转换为 std::string 的无符号整数,例如 "123456"。下面的代码不正确,因为它会产生不可读的二进制字符。

std::string str2IP(const std::string& address)
{
uint32_t ip = std::strtoul(address.c_str(), NULL, 0);
unsigned char bytes[4];
bytes[0] = ip & 0xFF;
bytes[1] = (ip >> 8) & 0xFF;
bytes[2] = (ip >> 16) & 0xFF;
bytes[3] = (ip >> 24) & 0xFF;

std::stringstream ss;
ss << bytes[3] << "." << bytes[2] << "." << bytes[1] << "." << bytes[0];
return ss.str();
}

最佳答案

I/O流的格式化输出函数(运算符<<)对待char , signed char , 和 unsigned char作为字符——它们将值解释为字符代码,而不是数字。此代码将输出 A :

unsigned char c = 65;
std::cout << c;

同样适用于 std::uint8_t在大多数实现中,因为他们只是将其用作 typedefunsigned char .您需要使用适当的数字类型,例如 unsigned short :

std::string str2IP(const std::string& address)
{
uint32_t ip = std::strtoul(address.c_str(), NULL, 0);
unsigned short bytes[4];
bytes[0] = ip & 0xFF;
bytes[1] = (ip >> 8) & 0xFF;
bytes[2] = (ip >> 16) & 0xFF;
bytes[3] = (ip >> 24) & 0xFF;

std::stringstream ss;
ss << bytes[3] << "." << bytes[2] << "." << bytes[1] << "." << bytes[0];
return ss.str();
}

关于c++ - 将字符串转换为 IP 地址时输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com