如何从 DWORD 构造 std::string?

发布于 2024-07-22 04:35:35 字数 234 浏览 14 评论 0 原文

我有以下代码:

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

GetLastError() 返回一个 DWORD 数值,但 std::string 的构造函数不接受 <代码>DWORD

我能做些什么?

I have following code:

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

GetLastError() returns a DWORD a numeric value, but the constructor of std::string doesn't accept a DWORD.

What can I do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

ま昔日黯然 2024-07-29 04:35:35

您想阅读 ostringstream:

#include <sstream>
#include <string>

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

You want to read up on ostringstream:

#include <sstream>
#include <string>

int main()
{
   std::ostringstream stream;
   int i = 5;
   stream << i;
   std::string str = stream.str();
} 
乱了心跳 2024-07-29 04:35:35

您想要将数字转换为字符串

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

boost::lexical_cast

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

You want to convert the number to a string:

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

Or boost::lexical_cast:

Log(boost::lexical_cast<std::string>(GetLastError()), Error);
追风人 2024-07-29 04:35:35

自 C++11 起

std:: to_string() 具有 intlonglong longunsigned int 的重载>、unsigned longunsigned long longfloatdoublelong double >。

#include <string>

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

是的,我是 auto< /a>.

使用您的示例:

Tools::Logger.Log(std::to_string(GetLastError()), Error);

Since C++11

std::to_string() with overloads for int, long, long long, unsigned int, unsigned long, unsigned long long, float, double, and long double.

#include <string>

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

Yes, I'm a fan of auto.

To use your example:

Tools::Logger.Log(std::to_string(GetLastError()), Error);
自我难过 2024-07-29 04:35:35

使用 Boost 的 lexical_cast对于像上面这样的简单情况:

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

Use Boost's lexical_cast for simple cases such as the above:

Tools::Logger.Log(lexical_cast<string>(GetLastError()), Error);
救星 2024-07-29 04:35:35

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

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

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

几年前,Dr Dobb 中有很多关于此的文章:部分一个两个三个。 非常详细地探讨这个主题,特别是关于性能。

You can use STLSoft's winstl::int_to_string(), as follows:

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

Also, if you want to lookup the string form of the error code, you can use STLSoft's winstl::error_desc.

There were a bunch of articles in Dr Dobb's about this a few years ago: parts one, two, three, four. Goes into the subject in great detail, particularly about performance.

淡水深流 2024-07-29 04:35:35

使用 std::stringstream。

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

Use std::stringstream.

std::stringstream errorStream;
errorStream << GetLastError();
Tools::Logger.Log(errorStream.str(), Error);
她说她爱他 2024-07-29 04:35:35

我通常做的是:

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

what i normally do is:

std::ostringstream oss;
oss << GetLastError() << " :: " << Error << std::endl;
Tools::Logger.Log(oss.str()); // or whatever interface is for logging
若言繁花未落 2024-07-29 04:35:35

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

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

从任何源创建字符串的函数。

因此,在我们的项目中,

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

除非有人包装它,否则按照建议的方式使用流不会通过我的审查。

As all guys here suggested, implementation will use stringstream.
In my current project we created function

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

to create string from any source.

So in our project it would be

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

Such usage of streams in the suggested way wouldn't pass my review unless someone wrap it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文