Как мне создать std :: string из DWORD? - PullRequest
16 голосов
/ 21 мая 2009

У меня есть следующий код:

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

GetLastError() возвращает DWORD числовое значение, но конструктор std::string не принимает DWORD.

Что я могу сделать?

Ответы [ 8 ]

34 голосов
/ 21 мая 2009

Вы хотите прочитать об ostringstream:

#include <sstream>
#include <string>

int main()
{
   std::ostringstream stream;
   int i = 5;
   stream << i;
   std::string str = stream.str();
} 
22 голосов
/ 21 мая 2009

Вы хотите преобразовать число в string:

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

Или boost::lexical_cast:

Log(boost::lexical_cast<std::string>(GetLastError()), Error);
12 голосов
/ 16 апреля 2014

С 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);
9 голосов
/ 21 мая 2009

Используйте Boost's lexical_cast для простых случаев, таких как:

Tools::Logger.Log(lexical_cast<string>(GetLastError()), Error);
2 голосов
/ 22 мая 2009

Вы можете использовать STLSoft winstl :: int_to_string () следующим образом:

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

Кроме того, если вы хотите найти строковую форму кода ошибки, вы можете использовать STLSoft's winstl :: error_desc .

Несколько лет назад в «1012» доктора Добба было несколько статей об этом: части один , два , три четыре . Подробно расскажу о теме , особенно о производительности.

1 голос
/ 21 мая 2009

Использовать std :: stringstream.

std::stringstream errorStream;
errorStream << GetLastError();
Tools::Logger.Log(errorStream.str(), Error);
0 голосов
/ 21 мая 2009

Как все ребята здесь предложили, реализация будет использовать stringstream.
В моем текущем проекте мы создали функцию

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

для создания строки из любого источника.

Так что в нашем проекте это будет

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

Такое использование потоков предлагаемым способом не пройдет мой обзор, если кто-то не закроет его.

0 голосов
/ 21 мая 2009

что я обычно делаю, это:

std::ostringstream oss;
oss << GetLastError() << " :: " << Error << std::endl;
Tools::Logger.Log(oss.str()); // or whatever interface is for logging
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...