2011-09-08 183 views
5

如何將uint64_t的值轉換爲std :: string? 我需要構建包含這個值 例如這樣的事情的std :: string:將uint64_t轉換爲std :: string

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

謝謝

+0

在Windows(MSVC),你可以使用'%I64d'使用'std :: sprintf'時的格式說明符。 –

+2

@Jonas - 考慮到這顯然是C++,我強烈建議保持清除'sprintf',尤其是使用非可移植擴展。 – Flexo

回答

8

兼用boost::lexical_caststd::ostringstream

如:

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

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

你能給我的代碼示例如何使用std :: ostringstream? – Yakov

+0

@yakov - 爲兩者添加示例。您將需要'#include '或'#include ',具體取決於您使用的解決方案。 – Flexo

+0

從現在開始,已經下調了,應該使用標準的C++ 11解決方案 - std :: to_string。 – Liosan

0
string genString(uint64_t val) 
{ 
    char temp[21]; 
    sprintf(temp, "%z", val); 
    return temp; 
} 
+0

將來任何人都可以使用它,請確保使緩衝區足夠大。如果你想增加一點效率,你也可以使這個緩衝區爲'靜態'。 –

+1

@Seth-是靜態的(因此不可重入),比從n到n + 21進入函數時改變堆棧指針增加的速度真的快嗎? – Flexo

+0

@awoodland是單線程應用程序。 –

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); 
相關問題