转换 uint64_t 到 std::string

Convert uint64_t to std::string

提问人:YAKOVM 提问时间:9/8/2011 最后编辑:paxdiabloYAKOVM 更新时间:11/6/2014 访问量:49795

问:

如何将uint64_t值转移到 std::string? 我需要构造包含此值的 std::string 例如,像这样的东西:

void genString(uint64_t val)
{
      std::string str;
      //.....some code for str 
      str+=(unsigned int)val;//????
}

谢谢

C++ 字符串 std uint64

评论

0赞 Jonas Engström 9/8/2011
在 Windows (MSVC) 上,可以使用格式说明符,同时使用%I64dstd::sprintf
2赞 Flexo 9/8/2011
@Jonas - 鉴于这显然是C++我强烈建议远离 ,尤其是对于不可移植的扩展。sprintf

答:

12赞 Flexo 9/8/2011 #1

使用或boost::lexical_caststd::ostringstream

例如:

str += boost::lexical_cast<std::string>(val);

std::ostringstream o;
o << val;
str += o.str();

评论

0赞 YAKOVM 9/8/2011
你能给我如何使用 std::ostringstream 的代码示例吗?
0赞 Flexo 9/8/2011
@yakov - 为两者添加了示例。您将需要或取决于您使用的解决方案。#include <boost/lexical_cast.hpp>#include <sstream>
1赞 Liosan 8/30/2016
因为到目前为止,应该使用标准的 C++11 解决方案 - std::to_string。
2赞 NMI 9/8/2011 #2
string genString(uint64_t val)
{
   char temp[21];
   sprintf(temp, "%z", val);
   return temp;
}

评论

0赞 Seth Carnegie 9/8/2011
对于将来可能使用它的人,请确保您的缓冲区足够大。此外,如果您想提高效率,也可以创建该缓冲区。static
1赞 Flexo 9/8/2011
@Seth - 静态(因此不可重入)真的比在进入函数时更改堆栈指针增加更快吗?nn + 21
0赞 Flexo 9/8/2011
@Seth - ia32 上带有 -O3 的 gcc 4.4 给了我完全相反的行为。 使其在 10,000,000 次调用循环的 100 次重复中始终(略微)慢(超过错误)。对我来说似乎为时过早的优化。本地版本中的主要几率是 vs ,一个 O(1) 的变化。staticsubl $72, %espsubl $52, %esp
0赞 Flexo 9/8/2011
@nmi - 我认为这是不正确的 - 我得到和 gcc%ztest.cc:10:29: warning: conversion lacks type at end of formattest.cc:10:29: warning: too many arguments for format
5赞 jcoder 9/8/2011 #3

我在下面使用类似这样的代码。因为它是一个模板,所以它可以与任何类型一起使用,支持运算符<<流。

#include <sstream>

template <typename T>
std::string tostring(const T& t)
{
    std::ostringstream ss;
    ss << t;
    return ss.str();
}

例如

uint64_t data = 123;
std::string mystring = tostring(data);
36赞 dau_sama 11/6/2014 #4

在 C++ 11 中,您可以只使用:

std::to_string()

它在标头中定义

http://www.cplusplus.com/reference/string/to_string/