Convert from std::string to DWORD

Gabriel picture Gabriel · Apr 26, 2011 · Viewed 18.6k times · Source


I have a simple problem with a conversion:

std::string str = "0xC0A80A02"

and I need to convert it to DWORD.
I searched on the web and found some solution but none seems to work.
try1:

DWORD m_dwIP = atol(str.c_str());

try2:

std::istringstream ss(str.c_str());
ss >> m_dwIP;

try3:

sscanf (str.c_str(),"%u",str,&m_dwIP);

Note the string stores the value in hexa .

Thanks,
Gabriel

Answer

orlp picture orlp · Apr 26, 2011

Assuming sizeof(DWORD) == sizeof(unsigned long), this should do:

#include <cstdlib>
DWORD m_dwIP = std::strtoul(str.c_str(), NULL, 16);

See http://www.cplusplus.com/reference/clibrary/cstdlib/strtoul/.

Note that this is usable for both C and C++ (strip of the std:: and c_str() and change <cstdlib> to <stdlib.h> but this should be pretty obvious).