gpt4 book ai didi

c++ - IP到长转换c++

转载 作者:行者123 更新时间:2023-11-28 05:00:58 26 4
gpt4 key购买 nike

我试图在 c++ 中将 IP 字符串转换为 long,而且我不想使用任何 inet 的功能。

我正在使用以下函数转换它:

unsigned long IPStringToLong(std::string IPAddr)
{
unsigned char aClassByte, bClassByte, cClassByte, dClassByte;
sscanf_s(IPAddr.c_str(), IP_TO_BYTES_FORMAT, &aClassByte, &bClassByte, &cClassByte, &dClassByte);
unsigned long IP = (aClassByte << 24) | (bClassByte << 16) | (cClassByte << 8) | dClassByte;
std::cout << IP << std::endl;
return IP;
}

IP_TO_BYTES_FORMAT 定义在这里:

#define IP_TO_BYTES_FORMAT "%hhu.%hhu.%hhu.%hhu"

打印只是为了调试。

Visual Studio 抛出运行时错误:Stack corruption around variable bClassByte,但转换确实有效。

当我将格式定义为 short 时(当然还要更改代码):

#define IP_TO_BYTES_FORMAT "%hu.%hu.%hu.%hu"

它工作得很好,我不明白为什么。

最佳答案

你说你正在使用 C++,但你实际上是在调用 C 函数。这就是问题的原因:您找到了一些 C99 代码。 %hhu 是 C99。您的 Visual Studio 版本未实现 C99。

修复很简单,因为无论如何您还需要修复一些东西。也不要使用 short;点分四边形格式也允许 8.248.8.16。换句话说,您需要 %d.%d.%d.%d,并检查您实际读取了多少字段(scanf 的返回值)。虽然我们做得对,但我们也可以使用 int parts[4] 而不是 a,b,c,d

关于c++ - IP到长转换c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45983333/

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