簡體   English   中英

C語言-[原位復制] float *到char *,反之亦然

[英]C Language - [copy in place] float* to char* and the reverse

我想將浮點緩沖區復制到char(字節)緩沖區中,而不為兩個單獨的緩沖區分配內存。 換句話說,我想使用一個緩沖區並復制到位。 問題是,如果我需要一個浮點緩沖區,那么為了將其復制到char上,我將需要一個char *指針; 如果我要從float *復制到float *,這將很容易,因為我只需為目標和源傳遞相同的指針。

例如。

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

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

}
????????

我該怎么做?

如果在同一指針中傳遞了memcpy,它是否就位?

如果要將float指針轉換為char指針,則強制轉換就足夠了。

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

您的問題似乎有點困惑。

您是否只想將浮點數數組解釋為char數組(用於寫入文件之類的東西?)。 如果是這樣,只需進行轉換即可。 C中的所有指針都可以由char *表示。

memcpy將從一個內存位置復制到另一個。 但是請仔細跟蹤您的“ len”參數是浮點數還是字節數。 如果“ len”是數組中的浮點數,請在memcpy調用中將其乘以sizeof(float)。

作為已建議的強制轉換的替代方法,您可能需要考慮使用聯合,例如:

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

兩種方式都不會有很大的不同,但是您可能會發現其中一種比其他方式更方便或可讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM