我想将IP字符串转换为长c++
, 我宁愿不使用任何inet
的函数。IP到长转换C++
我用下面的函数将其转换:
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
S(和改变路线的代码):
#define IP_TO_BYTES_FORMAT "%hu.%hu.%hu.%hu"
它工作得很好,我不明白为什么。
'“%hh”'不是有效的格式。你的意思是“%胡”吗? –
sscanf类函数不带类型安全参数。 %u格式需要指向整数的指针,你给char(byte)指针,sscanf函数doest知道这一点。下一个变量被破坏(运行时的调试版本发出警告) –
@Someprogrammerdude是的,谢谢! –