我有以下代码,但我不确定%0x%x以下代码中的含义是什么?
sprintf(buf, "pixel : %0x%x \n", gpbImageData[100]);
OutputDebugString(buf);
Run Code Online (Sandbox Code Playgroud)
gpbImageData[100] 指向内存中的图像数据.
Car*_*rum 12
您的示例导致未定义的行为.格式字符串将导致sprint期望两个int值:
%0x
%x
Run Code Online (Sandbox Code Playgroud)
这两个意思完全相同 - 将值打印为十六进制数.但是,您显示的调用只传递一个参数.
你确定它没说0x%x吗?如果没有,它可能应该......更正常,并将传入的值打印为带有前缀的十六进制数字0x.
您显示的代码应该会发出警告. clang得到:
example.c:5:15: warning: more '%' conversions than data arguments [-Wformat]
printf("%0x%x\n", 125987);
~^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
并gcc说:
example.c: In function ‘main’:
example.c:5: warning: too few arguments for format
example.c:5: warning: too few arguments for format
Run Code Online (Sandbox Code Playgroud)
两者都没有提供任何标志.
你当然是指这种格式字符串 "0x%x"
sprintf(buf, "pixel : 0x%x \n", gpbImageData[100]);
Run Code Online (Sandbox Code Playgroud)
这会在0x写入时将前缀添加到十六进制数字中buf.
请注意,您可以使用标志字符实现相同的操作#:
sprintf(buf, "pixel : %#x \n", gpbImageData[100]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17307 次 |
| 最近记录: |