Язык C - [скопировать на место] с плавающей точкой * на символ * и наоборот - PullRequest
1 голос
/ 29 августа 2010

Я хочу скопировать буфер с плавающей запятой в буфер символов (байт) без выделения памяти для двух отдельных буферов.Другими словами, я хочу использовать один буфер и копировать на место.Проблема в том, что если мне нужен плавающий буфер, то для того, чтобы скопировать его в символ, мне понадобится указатель типа 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 ]

3 голосов
/ 29 августа 2010

Если вы хотите преобразовать указатель float в указатель char, достаточно приведения.

float* someBuffer;
...
char* someBuffer2 = (char*)someBuffer;
1 голос
/ 29 августа 2010

В качестве альтернативы уже рекомендованному кастингу, вы можете рассмотреть возможность использования объединения, например:

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

В любом случае, вряд ли будет большая разница, но выможет найти один более удобный или читаемый, чем другой.

1 голос
/ 29 августа 2010

Ваш вопрос кажется немного запутанным.

Хотите ли вы просто интерпретировать массив с плавающей точкой как массив символов (для чего-то вроде записи в файл?). Если так, просто бросьте. Все указатели в C могут быть представлены символами *.

memcpy будет копировать из одной ячейки памяти в другую. Но внимательно следите за тем, является ли ваш параметр len числом с плавающей запятой или числом байтов. Если "len" - это число чисел с плавающей точкой в ​​массиве, умножьте его на sizeof (float) в вызове memcpy.

...