c++ 此 swprintf() 使用哪种格式

c++ which format is used in this swprintf()

这在int swprintf (wchar_t* ws, size_t len, const wchar_t* format, ...);中指定了什么格式?

L"x%04.4x "

一个break-down的部分:

  • L 前缀 specifies a wide format stringwchar_t *,相对于 [s]printf 中的 char *
  • 开头的 x 不是格式说明符的一部分,与结尾的 space
  • 相同
  • %x 导致参数的十六进制表示
  • 0 指定填充 - 即,如果给定的数字小于指定的数字位数(请参阅下一个要点),它将用 0 填充
  • 之后的 4 给出宽度,即打印的位数(但包括额外的字符,例如 0x,例如 # 前缀也给出了)
  • .4 - 'precision' 对于浮点数,对于整数它是打印数字的(最小)数量

参见示例 this answer, and myriads of other format specifier resources, e.g. on cppreference

请注意,宽度和精度的组合可能会导致意外结果;精度用于位数(包括0的个数),宽度用于结果字符串的宽度;示例:

wprintf(L"x%2x\n", 0x618);
wprintf(L"x%.2x\n", 0x618);
wprintf(L"x%0.3x\n", 0x0618);
wprintf(L"x%0.4x\n", 0x0618);
wprintf(L"x%01.4x\n", 0x618);
wprintf(L"x%04.4x\n", 0x618);
wprintf(L"x%010.4x\n", 0x618);
wprintf(L"x%010x\n", 0x618);

输出:

x618
x618
x618
x0618
x0618
x0618
x    0618
x00000618

因此,如您所见,小于 4 的“宽度”不会改变输出的任何内容,除非精度也降低(但小于 3 的精度也不会减少显示的位数,如用更少的数字表示数字是不可能的。

并且在 next-to-last 行中,您会看到宽度值较大但精度较低的效果;输出是 right-aligned,但使用 spaces 而不是 0 作为前缀。