我对转换有一个简单的问题:
std::string str = "0xC0A80A02"
我需要将其转换为DWORD 我在网上搜索并找到了一些解决方案,但似乎都没有 try1:
DWORD m_dwIP = atol(str.c_str());
试试2:
std::istringstream ss(str.c_str());
ss >> m_dwIP;
尝试3:
sscanf (str.c_str(),"%u",str,&m_dwIP);
请注意,字符串将值存储为hexa。
谢谢,
加布里埃尔
答案 0 :(得分:7)
假设sizeof(DWORD) == sizeof(unsigned long)
,应该这样做:
#include <cstdlib>
DWORD m_dwIP = std::strtoul(str.c_str(), NULL, 16);
请参阅http://www.cplusplus.com/reference/clibrary/cstdlib/strtoul/。
请注意,这可用于C和C ++(std::
和c_str()
的条带,并将<cstdlib>
更改为<stdlib.h>
,但这应该非常明显。)< / p>
答案 1 :(得分:5)
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";
输出c0a80a02
。
答案 2 :(得分:-3)
这是一个相当简单的问题。作为一个人,你会如何读取十六进制数并将其转换为十进制数?如果你是超人,你会立即知道它,但如果你像我们其他人一样,并使用宝贵的大脑空间来记住非计算机的东西,比如如何摆动高尔夫球杆,你将不得不做一些算术。你使用心算法进行转换,你需要的是为你做思考的代码。您可以使用此算法:
完成所有操作后,累加器中剩余的值就是结果。