我在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);

最佳答案

snprintf不是Boost函数。它知道如何仅打印基本类型。如果这些都不与boost::uint64_t一致,那么甚至不可能打印出来。

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

关于c++ - 是否有适合boost::uint64_t与snprintf一起使用的格式化程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18759682/

10-09 20:15
查看更多