C语言 - [就地复制]浮动*到char *,反之亦然

时间:2010-08-29 19:26:16

标签: c pointers programming-languages type-conversion

我想将浮点缓冲区复制到char(byte)缓冲区中,而不为两个单独的缓冲区分配内存。换句话说,我想使用一个缓冲区并复制到位。 问题是,如果我需要一个浮动缓冲区,那么为了将其复制到一个字符,那么我将需要一个char *指针;如果我是从float *复制到float *那么就很容易,因为我只需传入目标和源的相同指针。

例如

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

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

}
????????

我该怎么做?

memcpy是否会复制到位?如果在同一指针中传递?

3 个答案:

答案 0 :(得分:3)

如果要将float指针转换为char指针,则强制转换就足够了。

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

答案 1 :(得分:1)

你的问题似乎有点困惑。

你想简单地将一个浮点数组解释为一个char数组(比如写一个文件吗?)。如果是这样,只需施放。 C中的所有指针都可以用char *表示。

memcpy将从一个内存位置复制到另一个内存位置。但请仔细跟踪您的“len”参数是浮点数还是字节数。如果“len”是数组中的浮点数,则在memcpy调用中将它乘以sizeof(float)。

答案 2 :(得分:1)

作为已经推荐的投射的替代方案,您可能需要考虑使用联合,例如:

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

两种方式都不太可能存在巨大差异,但您可能会发现另一种方便或可读。