2
我有一个Visual Studio 2008 C++应用程序,我想将宽字符字符串中的IP地址以点划线表示法转换为地址(类似于inet_aton
);将字符串转换为网络地址
我这样做:
DWORD StringToAddress(const std::wstring& address)
{
BYTE a = 0, b = 0, c = 0, d = 0;
swscanf(address.c_str(), L"%u.%u.%u.%u", &a, &b, &c, &d);
return d << 24 | c << 16 | b << 8 | a;
}
不幸的是,当我像169.254.255.255
地址的第三个四倍出来的swscanf
为0
,而不是255
的。
我做错了什么?有没有解决这个问题的好方法?
感谢, PaulH
我可能会最终这样做。但我很好奇为什么我的swscanf不能正常工作。 – PaulH 2011-03-14 14:00:44
@PaulH,可能是因为'%u'返回大于一个字节的'unsigned int'值。尝试将'a','b','c'和'd'声明为'UINT',并在最后一行中屏蔽它们的低位字节。 – 2011-03-14 14:28:38
就是这样。谢谢。 – PaulH 2011-03-14 14:51:21