2011-03-11 30 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

相關問題