我在C ++项目中使用boost/cstdint.hpp
因为我在C ++ 03模式下编译(-std=c++03
)而我想要有固定宽度的整数(它们通过网络传输并存储到文件)。我也在使用snprintf
,因为它是简单和快速格式化字符串的方式。
是否有适当的格式化程序可以将boost::uint64_t
与snprintf(...)
一起使用,还是应该切换到另一个解决方案(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);
答案 0 :(得分:3)
snprintf
不是Boost功能。它知道如何仅打印基本类型。如果这些都不与boost::uint64_t
重合,则甚至无法打印出来。
通常,您注意到格式化程序必须匹配基础类型。因此,即使可能,格式化程序也将依赖于平台。 Boost没有扩展机制可以将新的格式化程序添加到snprintf
。