2017-04-01 64 views
-3

我有一个unsigned int,我现在用的每一个32位的存储特定的资料片..正整数为void *,然后返回

function(void * a); 
unsigned int val = 0xFFFFFFFF; 
function((void *) (long) val); 

内的功能,我想修改unsigned int ..我无法弄清楚如何在不丢失精度或任何位的情况下对其进行解码。是tjere这样做正确的方式..似乎无法弄清楚..

+1

'int'不保证有32位。如果您需要固定宽度类型,请使用'stdint.h'中的一个。 – Olaf

+2

你的问题是什么?为什么所有的铸造?为什么使用'void *'?如果不是绝对必要的,千万不要使用'void *'。 – Olaf

+0

什么似乎是问题?你在做什么,出了什么问题?为什么'(长)'演员在那里? –

回答

2

你应该在浇注到一个void *这样val的地址传递给函数:

function((void*)&val); 

并设计你的功能,如:

void function(void* ptr) { 
    unsigned int *p = (unsigned int*)ptr; 
    (*p)++; //example of a change 
} 
+0

是否有无论如何我可以投入到一个unsigned int而不是一长? –

+0

这是否回答你的问题? – alDiablo

+0

哇..我的愚蠢......谢谢! –