跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

c++如何转换long为string_c++ to_string系列函数汇总【总结】

std::to_string(long)是首选,因它轻量安全、无内存泄漏、自动保留符号、支持极大值且性能优于ostringstream;不支持进制定制等场景需换用stringstream或format。 直接用
std::to_string
就行,它原生支持
long
(以及
long long
、
int
等整型和浮点类型),无需额外头文件(C++11 起已内置在
中)。 为什么
std::to_string(long)
是首选 它是标准库提供的最轻量、最安全的转换方式,底层调用优化过的字符串格式化逻辑,不依赖 C 风格函数或流操作,无内存泄漏风险,也不需要手动管理缓冲区。
long
值会被无损转为十进制字符串,符号位自动保留(如
-123L
→
"-123"
) 不支持自定义进制(比如转十六进制必须换其他方法) 对极大值(如
LONG_MAX
)也稳定,不会因缓冲区溢出崩溃 性能优于
std::ostringstream
,尤其在高频调用场景
std::to_string
不支持的场景怎么办 当需要十六进制、八进制、带前导零、科学计数法或 locale 感知格式时,
std::to_string
无法满足,得换方案: 进制转换:用
std::stringstream
配合
std::hex
/
std::oct
,或 C++17 的
std::format
(如
std::format("{:x}", x)
) 固定宽度:用
std::setfill
+
std::setw
(配合 stringstream),或
std::format("{:08x}", x)
locale 格式(如千分位逗号):只能用
std::ostringstream
并 imbue 对应 locale 极简嵌入式环境(无 STL):退回到
snprintf
,但需预估缓冲区大小(如
char buf[32]
) 常见错误:误用
std::to_wstring
或
std::to_string(float)
std::to_wstring
返回的是
std::wstring
(宽字符),不是
std::string
,混用会导致编译失败或隐式转换意外截断;而
std::to_string
接收
float
或
double
时默认只保留 6 位有效数字,容易丢失精度——这不是 bug,是标准规定的行为。 C知道 CSDN推出的一款AI技术问答工具 下载 立即学习 “ C++免费学习笔记(深入) ”; 要避免宽窄混淆:确认目标类型是
std::string
再调用
std::to_string
浮点数需更高精度:改用
std::stringstream
或
std::format
控制小数位数(如
"{:.10f}"
) 别对
long long
用旧式
ltoa
:它非标准,Windows-only,且参数顺序易错(目标 buffer 在前) 真正要注意的其实是边界情况:比如
long
在不同平台可能是 32 位或 64 位,但
std::to_string
全部兼容;唯一容易被忽略的是——它不抛异常,也不会告诉你转换失败,因为整型到字符串根本不存在“失败”语义。只要值合法,结果就确定。

相关文章