2010-08-29 21 views
1

我想將一個浮點緩衝區複製到一個char(字節)緩衝區,而不用爲兩個單獨的緩衝區分配內存。換句話說,我想使用一個緩衝區並複製到位。 問題是,如果我需要一個浮動緩衝區,那麼爲了將它複製到一個字符,那麼我將需要一個char *指針;如果我是從float *複製到float *,那很容易,因爲我只是傳入目標和源的相同指針。C語言 - [複製到位] float *到char *和反向

例如。

void CopyInPlace(float* tar, float* src, int len) { 
.... 
} 
CopyInPlace(someBuffer, someBuffer, 2048); 

void PackFloatToChar(char* tar, float* src, int len) { 

} 
???????? 

我該怎麼做?

如果傳入相同的指針,是否存在memcpy副本?

+3

對不起,什麼? __ – kennytm 2010-08-29 19:28:08

+1

你希望通過複製來實現什麼目標? – ysth 2010-08-29 19:32:33

+0

你想將浮點數轉換爲字符格式是什麼?如果char *的空間需要比浮點*更多的空間會怎麼樣?或者將float *轉換爲char *所有你需要的東西? – nos 2010-08-29 19:33:32

回答

1

你的問題似乎有點困惑。

你想簡單地將一個浮點數組解釋爲一個char數組(用於寫入文件之類的東西?)。如果是這樣,簡單地施放。 C中的所有指針都可以用char *表示。

memcpy將從一個內存位置複製到另一個內存位置。但要仔細追蹤你的「len」參數是浮點數還是字節數。如果「len」是數組中的浮點數,則在memcpy調用中將其乘以sizeof(float)。

+0

啊確定memcpy的作品。但是,解開字節浮點運算的算法是什麼?我將發佈這個作爲我的下一個問題。謝謝! – 2010-08-29 19:58:40

+0

@juxstapose您不能使用memcpy複製到相同的緩衝區。您需要刪除源/目標重疊。 – nos 2010-08-29 20:47:13

3

如果要將float指針轉換爲char指針,則只需轉換即可。

float* someBuffer; 
... 
char* someBuffer2 = (char*)someBuffer; 
1

作爲替代這已經被推薦鑄造,你可能要考慮使用一個聯盟,是這樣的:

union x { 
    float float_val; 
    char bytes[sizeof(float)]; 
}; 

有沒有可能是一個巨大的差異無論哪種方式,但你可能會發現比另一個更方便或更可讀。

+0

與gcc的最大區別在於,該解決方案避開了嚴格的別名規則。使用另一個編譯器不能保證,因爲通過另一個字段訪問聯合而不是最後一次編寫的字段與轉換指針一樣未定義,然後在標準中訪問它們。 – 2010-08-29 19:53:30