boost :: uint64_t是否有适当的格式化程序用于snprintf?

时间:2013-09-12 08:52:38

标签: c++ boost string-formatting

我在C ++项目中使用boost/cstdint.hpp因为我在C ++ 03模式下编译(-std=c++03)而我想要有固定宽度的整数(它们通过网络传输并存储到文件)。我也在使用snprintf,因为它是简单快速格式化字符串的方式。

是否有适当的格式化程序可以将boost::uint64_tsnprintf(...)一起使用,还是应该切换到另一个解决方案(boost::format,std :: ostringstream)?

我目前正在使用%lu,但我对此并不满意,因为它可能不适用于其他架构(其中boost::uint64_t未定义为long unsigned),从而无法实现使用固定宽度的整数。

boost::uint64_t id
id = get_file_id(...)
const char* ENCODED_FILENAME_FORMAT = "encoded%lu.dat";
//...
char encoded_filename[34];
snprintf(encoded_filename, 34, ENCODED_FILENAME_FORMAT, id);

1 个答案:

答案 0 :(得分:3)

snprintf不是Boost功能。它知道如何仅打印基本类型。如果这些都不与boost::uint64_t重合,则甚至无法打印出来。

通常,您注意到格式化程序必须匹配基础类型。因此,即使可能,格式化程序也将依赖于平台。 Boost没有扩展机制可以将新的格式化程序添加到snprintf