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 string(wchar_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 作为前缀。
这在int swprintf (wchar_t* ws, size_t len, const wchar_t* format, ...);
中指定了什么格式?
L"x%04.4x "
一个break-down的部分:
-
L
前缀 specifies a wide format string(wchar_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 作为前缀。