我已经在很多情况下使用了 boost::format,但是我发现了一个 Windows 实现没有像我预期的那样做出反应,因为它抛出了一个异常
boost::bad_format_string: format-string is ill-formed
我使用宏来定义不同平台的十六进制输出格式:
#if (defined(WIN32) || defined(WIN64))
#define FORMATUI64X_09 "%09I64X"
#define FORMATUI64X_016 "%016I64X"
#else
#if defined __x86_64__
#define FORMATUI64X_09 "%09lX"
#define FORMATUI64X_016 "%016lX"
#else
#define FORMATUI64X_09 "%09llX"
#define FORMATUI64X_016 "%016llX"
#endif
#endif
并调用格式如下:
string msg = (boost::format("0x"FORMATUI64X_016"(hex) \t %i \t %d \t %s \t %i\t ") % an uint64_t % an int % an uint % a char* % an uint).str();
请注意,我使用的语法与“fprintf”完美配合。
我想它来自 'uint64_t' 格式的十六进制,但是您知道以适用于所有平台的方式编写同一行吗?