从std :: string转换为DWORD

Gab*_*iel 2 c++ string winapi dword type-conversion


我有一个简单的转换问题:

std::string str = "0xC0A80A02"
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为DWORD.
我在网上搜索并找到了一些解决方案,但似乎都没有.
try1:

DWORD m_dwIP = atol(str.c_str());
Run Code Online (Sandbox Code Playgroud)

try2:

std::istringstream ss(str.c_str());
ss >> m_dwIP;
Run Code Online (Sandbox Code Playgroud)

try3:

sscanf (str.c_str(),"%u",str,&m_dwIP);
Run Code Online (Sandbox Code Playgroud)

请注意,字符串将值存储为hexa.

谢谢,
加布里埃尔

orl*_*rlp 7

假设sizeof(DWORD) == sizeof(unsigned long),这应该做:

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

请参阅http://www.cplusplus.com/reference/clibrary/cstdlib/strtoul/.

注意,这是为C和C++可用(的带材std::c_str()并改变<cstdlib><stdlib.h>但是这应该是很明显的).


Jac*_*oyd 6

istringstream工作正常,只需删除0x前缀并使用std::hex格式化程序:

  std::string str = "0xC0A80A02";
  unsigned int m_dwIP;

  std::istringstream ss(&str[2]);
  ss >> std::hex >> m_dwIP;

  std::cout << std::hex << m_dwIP << "\n";
Run Code Online (Sandbox Code Playgroud)

输出c0a80a02.

  • @Draco:`DWORD是`DWORD.将其声明为可以避免意外. (2认同)