2017-04-01 24 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

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