2011-09-08 42 views
5

Làm thế nào tôi có thể chuyển giá trị uint64_t sang std :: string? tôi cần phải xây dựng các std :: string chứa giá trị này Ví dụ một cái gì đó như thế này:Chuyển đổi uint64_t thành std :: string

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

Cảm ơn bạn

+0

Trên Windows (MSVC), bạn có thể sử dụng '% I64d' định dạng specifier khi sử dụng 'std :: sprintf' –

+2

@Jonas - cho điều này rõ ràng là C++ Tôi khuyên bạn nên giữ cho rõ ràng của' sprintf', đặc biệt là với phần mở rộng không di động. – Flexo

Trả lời

8

sử dụng một trong hai boost::lexical_cast hoặc std::ostringstream

ví dụ:

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

hoặc

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

Bạn có thể cho tôi ví dụ về cách sử dụng std :: ostringstream không? – Yakov

+0

@yakov - ví dụ được thêm cho cả hai. Bạn sẽ cần '#include ' hoặc '#include ' tùy thuộc vào giải pháp bạn sử dụng. – Flexo

+0

Giảm giá từ bây giờ, nên sử dụng giải pháp chuẩn C++ 11 - std :: to_string. – Liosan

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

Để ai đó có thể sử dụng điều này trong tương lai, hãy chắc chắn để làm cho bộ đệm của bạn đủ lớn. Ngoài ra, bạn có thể làm cho bộ đệm đó 'tĩnh' nếu bạn muốn thêm hiệu quả hơn một chút. –

+1

@Seth - là tĩnh (và do đó không reentrant) thực sự nhanh hơn so với thay đổi tăng con trỏ ngăn xếp lúc nhập các chức năng từ 'n' để' n + 21'? – Flexo

+0

@awoodland yes cho các ứng dụng đơn luồng. –

3

Tôi sử dụng mã như sau bên dưới. Vì đó là mẫu, nó sẽ hoạt động với bất kỳ loại toán tử hỗ trợ nào < < tới luồng.

#include <sstream> 

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

ví dụ

uint64_t data = 123; 
std::string mystring = tostring(data); 
Các vấn đề liên quan