我在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);
最佳答案
snprintf
不是Boost函数。它知道如何仅打印基本类型。如果这些都不与boost::uint64_t
一致,那么甚至不可能打印出来。
通常,如您所述,格式化程序必须匹配基础类型。因此,即使有可能,格式化程序也将依赖于平台。 Boost没有扩展机制可以将新的格式化程序添加到snprintf
。
关于c++ - 是否有适合boost::uint64_t与snprintf一起使用的格式化程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18759682/