2013-11-25 65 views
1

我试图将代码从32b移植到64位,并且我被困在这一个错误中。移植32位到64位printf相关错误

 printf ("STUFF 0x%x ",(u_int32_t)val) 

在移植我得到一个错误说%×预计unsigned int类型和参数2的参数的类型是“长unsigned int类型”。因此,采取这种错误顾及我做出%x到%LX

变化
 printf ("STUFF 0x%lx ",(u_int32_t)val) 

格式%×期望类型的参数长unsigned int类型和参数2为unsigned int型的。这真是令人困惑。

现在我做这样的事情,它的工作原理。

 printf ("STUFF 0x%x ",(u_int32_t)(size_t)val) 

我不知道为什么这也解决了这个问题。现在确定什么是解决这个错误的正确方法。

在此处添加一个问题。

所以你有一个结构st;

st *a = NULL; 
    u_int32_t = B 

    a = (st *)B; 

我在这里得到一个错误,说“从不同大小的整数转换为指针”。我通过做类似

a = (st *)(size_t)B; 

这是正确的做法吗?

+2

什么类型是'val' *真* *? –

+0

它实际上的结构对象.. STRUCT一个{} 空隙MYFUNC(A * VAL){ 的printf( “0X STUFF%LX”,(u_int32_t)VAL) } //像这样 – Rags

回答

4

如果您想打印一个指针然后使用"%p"格式说明:

printf("STUFF %p\n", val); 

见例如this reference

+2

可替代地,他可以将其转换为'uintptr_t'并使用'PRIxPTR'说明符将其打印为整数。 –