提问人:YAKOVM 提问时间:9/8/2011 最后编辑:paxdiabloYAKOVM 更新时间:11/6/2014 访问量:49795
转换 uint64_t 到 std::string
Convert uint64_t to std::string
问:
如何将uint64_t值转移到 std::string? 我需要构造包含此值的 std::string 例如,像这样的东西:
void genString(uint64_t val)
{
std::string str;
//.....some code for str
str+=(unsigned int)val;//????
}
谢谢
答:
12赞
Flexo
9/8/2011
#1
使用或boost::lexical_cast
std::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 - 静态(因此不可重入)真的比在进入函数时更改堆栈指针增加更快吗?n
n + 21
0赞
Flexo
9/8/2011
@Seth - ia32 上带有 -O3 的 gcc 4.4 给了我完全相反的行为。 使其在 10,000,000 次调用循环的 100 次重复中始终(略微)慢(超过错误)。对我来说似乎为时过早的优化。本地版本中的主要几率是 vs ,一个 O(1) 的变化。static
subl $72, %esp
subl $52, %esp
0赞
Flexo
9/8/2011
@nmi - 我认为这是不正确的 - 我得到和 gcc%z
test.cc:10:29: warning: conversion lacks type at end of format
test.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()
它在标头中定义
评论
%I64d
std::sprintf
sprintf