2011-03-11 2 views
2

Visual Studio 2008 C++ 응용 프로그램에서 IP 주소를 점으로 된 쿼드 표기법의 넓은 문자열에서 inet_aton과 비슷한 주소로 변환하고 싶습니다.문자열을 네트워크 주소로 변환합니다.

나는이 일을 해요 : 내가 169.254.255.255 같은 주소를 줄 때

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; 
} 

불행하게도, 세 번째 쿼드는 0swscanf하지 255 나옵니다.

내가 잘못 했나요? 이 문제를 해결할 수있는 좋은 방법이 있습니까?

감사합니다, PaulH

답변

1

윈도우 inet_addr()이 있지만이 UNICODE를 지원하지 않는 것은 :

#include <winsock2.h> 

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

나는 아마 그 일을하게 될 겁니다. 그러나 왜'swscanf'가 제대로 작동하지 않는지 궁금합니다. – PaulH

+1

@ PaulH, 아마도'% u'는 바이트보다 큰'unsigned int '값을 반환하기 때문입니다. 대신'U' 대신'a','b','c' 및'd'를 선언하고 마지막 줄에서 낮은 바이트를 마스크하십시오. –

+0

그게 전부 였어. 고맙습니다. – PaulH

관련 문제