2012-03-17 2431 views
-1

我有以下代码,但我不确定%0x%x在以下代码中的含义?在C/C++编程中,%0x%x是什么意思?

sprintf(buf, "pixel : %0x%x \n", gpbImageData[100]); 
OutputDebugString(buf); 

gpbImageData[100]指向存储器中的图像数据。

+1

如果参数确实是一个指针,那么应该使用'%p'。 – 2012-03-17 18:44:13

+0

看看http://www.cplusplus.com/reference/clibrary/cstdio/printf/,然后如果你有更多的问题,请问。 – 2012-03-17 18:46:25

+0

+1 @OliCharlesworth。但是,从这个变量的名字我打赌'gpbImageData'是指针。 – 2012-03-17 18:48:00

回答

7

你当然意味着这个格式字符串"0x%x"

sprintf(buf, "pixel : 0x%x \n", gpbImageData[100]); 

这增加了0x前缀的十六进制数字时,都写在buf

注意,您可以实现同样的事情标记字符#

sprintf(buf, "pixel : %#x \n", gpbImageData[100]); 
+0

谢谢你的作品:) – user261002 2012-03-17 19:11:00

12

您的示例会导致未定义的行为。格式字符串会导致sprint希望两个int值:

%0x 
%x 

这两个意思完全一样的东西 - 打印值作为一个十六进制数。但是,您所显示的电话只传递一个参数。

你确定它不是说0x%x?如果没有,可能应该......这会更加正常,并将打印传入值作为以0x为前缀的十六进制数字。

您的代码如下所示应该会导致警告。 clang给出:

example.c:5:15: warning: more '%' conversions than data arguments [-Wformat] 
    printf("%0x%x\n", 125987); 
      ~^ 
1 warning generated. 

gcc说:

example.c: In function ‘main’: 
example.c:5: warning: too few arguments for format 
example.c:5: warning: too few arguments for format 

两个不提供任何标志都没有。

2

的正确格式为“为0x%X”为ouah和卡尔Norum时说。无论gpbImageData [100]的内容(指针或数字)如何,%x都会将其值作为十六进制数打印出来。 0x只是一个文本。也许“gpbImageData”是一个指针数组。