web-dev-qa-db-ja.com

DWORDからstd :: stringを作成するにはどうすればよいですか?

私は次のコードを持っています:

_Tools::Logger.Log(string(GetLastError()), Error);
_

GetLastError()DWORDの数値を返しますが、_std::string_のコンストラクターはDWORDを受け入れません。

私に何ができる?

17

あなたはostringstreamで読みたいです:

#include <sstream>
#include <string>

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

数値を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()intlonglong longunsigned intunsigned longunsigned long longfloatdouble、および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);
14
Max Truxa

Boostを使用する lexical_cast 上記のような単純な場合:

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

次のように、 STLSoft 's winstl :: int_to_string() を使用できます。

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

また、エラーコードの文字列形式を検索する場合は、STLSoftの winstl :: error_desc を使用できます。

数年前、これについて Dr Dobb's にたくさんの記事がありました:parts onetwothree4greatの詳細、特にパフォーマンスについて詳しく説明します。

2
dcw

Std :: stringstreamを使用します。

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

ここですべての人が示唆したように、実装はstringstreamを使用します。
現在のプロジェクトでは、関数を作成しました

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

任意のソースから文字列を作成します。

したがって、私たちのプロジェクトでは、

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

提案された方法でのストリームのそのような使用法は、誰かがそれをラップしない限り、私のレビューに合格しません。

0
Mykola Golubyev

私が通常することは:

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