2011-03-11 67 views
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地址的第三个四倍出来的swscanf0,而不是255的。

我做错了什么?有没有解决这个问题的好方法?

感谢, PaulH

回答

1

Windows有inet_addr(),但它似乎并不支持UNICODE

#include <winsock2.h> 

std::string address = "169.254.255.255"; 
unsigned long ip = inet_addr(address.c_str()); 
+0

我可能会最终这样做。但我很好奇为什么我的swscanf不能正常工作。 – PaulH 2011-03-14 14:00:44

+1

@PaulH,可能是因为'%u'返回大于一个字节的'unsigned int'值。尝试将'a','b','c'和'd'声明为'UINT',并在最后一行中屏蔽它们的低位字节。 – 2011-03-14 14:28:38

+0

就是这样。谢谢。 – PaulH 2011-03-14 14:51:21