我该如何构建一个std::string从双字?
题
我有下列代码:
Tools::Logger.Log(string(GetLastError()), Error);
GetLastError()
返回 DWORD
一个数值,但是构造的 std::string
不接受 DWORD
.
我能做些什么?
解决方案
您想在ostringstream读了起来:
#include <sstream>
#include <string>
int main()
{
std::ostringstream stream;
int i = 5;
stream << i;
std::string str = stream.str();
}
其他提示
您希望将数字转换成string
:
std::ostringstream os;
os << GetLastError();
Log(os.str(), Error);
或者boost::lexical_cast
:
Log(boost::lexical_cast<std::string>(GetLastError()), Error);
<强>由于C ++ 11 强>
std::to_string()
,提供重载int
,long
,long long
,unsigned int
, unsigned long
,unsigned long long
,float
,double
,和long double
。
auto i = 1337;
auto si = std::to_string(i); // "1337"
auto f = .1234f;
auto sf = std::to_string(f); // "0.123400"
是的,我的 auto
风扇。的
要使用例如:
Tools::Logger.Log(std::to_string(GetLastError()), Error);
使用升压的 lexical_cast
以这种简单的情况下作为以上:
Tools::Logger.Log(lexical_cast<string>(GetLastError()), Error);
你可以使用 STLSoft's winstl::int_to_string(), 如下:
Tools::Logger.Log(winstl::int_to_string(GetLastError()), Error);
此外,如果你想要查找的串形式的错误代码,可以使用STLSoft的 winstl::error_desc.
有一大堆的文章 博士Dobb's 关于这几年前:零件 一个, 两个, 三, 四个.进入主题 伟大的 详细,特别是有关性能。
使用的std :: stringstream的。
std::stringstream errorStream;
errorStream << GetLastError();
Tools::Logger.Log(errorStream.str(), Error);
我通常做的是:
std::ostringstream oss;
oss << GetLastError() << " :: " << Error << std::endl;
Tools::Logger.Log(oss.str()); // or whatever interface is for logging
由于这里所有球员的建议,实现将使用字符串流。点击 在我目前的项目中,我们创建了功能
template <typename T>
std::string util::str::build( const T& value );
要来自任何来源创建字符串。
因此,在我们的项目将是
Tools::Logger.Log( util::str::build(GetLastError()) );
在建议的方式流的这种用法不会通过我的审查,除非有人把它包起来。
不隶属于 StackOverflow