%0x%x在C/C++编程中意味着什么?

use*_*002 -1 c memory buffer

我有以下代码,但我不确定%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)

两者都没有提供任何标志.


oua*_*uah 9

你当然是指这种格式字符串 "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)