我想将浮点缓冲区复制到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是否会复制到位?如果在同一指针中传递?
答案 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)];
};
两种方式都不太可能存在巨大差异,但您可能会发现另一种方便或可读。