如何从DWORD构造std :: string?

时间:2009-05-21 15:58:08

标签: c++ numeric stdstring

我有以下代码:

Tools::Logger.Log(string(GetLastError()), Error);

GetLastError()会返回DWORD个数值,但std::string的构造函数不接受DWORD

我该怎么办?

8 个答案:

答案 0 :(得分:34)

你想阅读ostringstream:

#include <sstream>
#include <string>

int main()
{
   std::ostringstream stream;
   int i = 5;
   stream << i;
   std::string str = stream.str();
} 

答案 1 :(得分:22)

您想将数字转换为string

std::ostringstream os;
os << GetLastError();
Log(os.str(), Error);

boost::lexical_cast

Log(boost::lexical_cast<std::string>(GetLastError()), Error);

答案 2 :(得分:10)

自C ++ 11以来

std::to_string()重载intlonglong longunsigned intunsigned longunsigned long long,{{1 }},floatdouble

long double

是的,我是auto的粉丝。

使用您的示例:

auto i = 1337;
auto si = std::to_string(i); // "1337"
auto f = .1234f;
auto sf = std::to_string(f); // "0.123400"

答案 3 :(得分:9)

对于上述简单案例使用Boost的lexical_cast

Tools::Logger.Log(lexical_cast<string>(GetLastError()), Error);

答案 4 :(得分:2)

您可以使用STLSoftwinstl::int_to_string(),如下所示:

Tools::Logger.Log(winstl::int_to_string(GetLastError()), Error);

此外,如果要查找错误代码的字符串形式,可以使用STLSoft的winstl::error_desc

几年前Dr Dobb's中有很多关于此事的文章:部分onetwothreefour。以精彩细节进入主题,特别是关于表现。

答案 5 :(得分:1)

使用std :: stringstream。

std::stringstream errorStream;
errorStream << GetLastError();
Tools::Logger.Log(errorStream.str(), Error);

答案 6 :(得分:0)

我通常做的是:

std::ostringstream oss;
oss << GetLastError() << " :: " << Error << std::endl;
Tools::Logger.Log(oss.str()); // or whatever interface is for logging

答案 7 :(得分:0)

正如所有人在这里建议的那样,实现将使用stringstream。
在我目前的项目中,我们创建了函数

template <typename T>
std::string util::str::build( const T& value );

从任何来源创建字符串。

所以在我们的项目中它将是

Tools::Logger.Log( util::str::build(GetLastError()) );

除非有人将其包裹起来,否则以建议方式使用流不会通过我的评论。