Следующий код даст вам char*
представление всех float
s в параметре input
.
Тем не менее, я бы очень осторожен, что это действительно то, что вы хотите. Массив char * не является устойчивым к порядку байтов, и я всегда стараюсь не передавать выделенные указатели пользователям. Любой, кто использует эту функцию, должен освободить output
с delete[]
, но это никоим образом не очевидно из названия функции или сигнатуры, рецепта хрупкого кода.
void foo(const std::vector<std::vector<float> > &input, char* &output )
{
//this was likely an error, it is always an array of size 4
//char charBuf[sizeof(output)];
std::vector<float> tmp_output;
int counter = 0; // Why was this here?
for(unsigned int i=0; i<input.size(); i++)
{
// This is slightly more efficient than the hand rolled loop below.
// std::copy( input[i].begin(), input[i].end(),
// std::back_inserter<float>(tmp_output) );
for(unsigned int p=0; p<input.at(i).size(); p++)
{
tmp_output.push_back(input.at(i).at(p));
}
}
output = new char[tmp_output.size()*sizeof(float)];
std::copy( reinterpret_cast<const char*>(&(*tmp_output.begin())),
reinterpret_cast<const char*>(&(*tmp_output.end())),
output );
}