boost::uint64\t是否有合适的格式化程序与snprintf一起使用? 我在C++项目中使用了 Boo/CSTDIt.HPP < /Cube >,因为我正在C++ 03模式编译( -STD= C++ 03 ),我想要固定宽度的整数(它们通过网络传输并存储到文件中)。我还使用了snprintf,因为它是格式化字符串的一种简单而快速的方法
是否有合适的格式化程序可与boost::uint64\t是否有合适的格式化程序与snprintf一起使用? 我在C++项目中使用了 Boo/CSTDIt.HPP < /Cube >,因为我正在C++ 03模式编译( -STD= C++ 03 ),我想要固定宽度的整数(它们通过网络传输并存储到文件中)。我还使用了snprintf,因为它是格式化字符串的一种简单而快速的方法,c++,boost,string-formatting,C++,Boost,String Formatting,是否有合适的格式化程序可与snprintf(…)一起使用boost::uint64\t,或者我应该切换到另一个解决方案(,std::ostringstream) 我目前正在使用%lu,但我对它不太满意,因为它可能无法在另一个体系结构上工作(其中boost::uint64\u t未定义为长无符号),无法达到使用固定宽度整数的目的 boost::uint64_t id id = get_file_id(...) const char* ENCODED_FILENAME_FORMAT = "encod
snprintf(…)
一起使用boost::uint64\t
,或者我应该切换到另一个解决方案(,std::ostringstream)
我目前正在使用%lu
,但我对它不太满意,因为它可能无法在另一个体系结构上工作(其中boost::uint64\u t
未定义为长无符号
),无法达到使用固定宽度整数的目的
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\u t不一致,那么它甚至不可能打印出来
通常,正如您所注意到的,格式化程序必须与基础类型匹配。因此,即使可能,格式化程序也将依赖于平台。在C++11或C99中,Boost没有扩展机制可以向
snprintf
添加新的格式化程序,您有定义宏PRIu64
的头
,它是uint64\t
的合适格式化程序。我希望boost能提供类似的机制。64位无符号整数是一种基本类型。请参阅此SO帖子:@Xion345:这是标准库中的宏,应用于同一标准库。那容易多了。好吧,我现在明白你的意思了。我认为boost可以提供这种类型的机制,因为在大多数平台上,uint64\t
是unsigned
、long unsigned
或long long unsigned
的别名(因此存在这些类型的格式化程序)。因此,除了为uint64\u t
提供正确的别名外,boost还可以为PRIu64
提供正确的别名(无论是%u
,%lu
,%llu
)。