I receive some data over a wire protocol. One of the packets I receive has some int32_t values that represent complex numbers. i.e. 10 complex numbers come in the form of 20 int32_t values (real,imag).
I need to convert the int32_t's to float's and copy these values into a vector<std::complex<float>>. I am not sure of the preferred method to do this.
this works but sure is ugly and highly questionable. This is a sudo realtime system and I need as fast an operation as possible.
float coefBuffer[20];
std::transform(packet.coef,packet.coef+20,coefBuffer, [](int32_t x) { return (float)x;});
std::memcpy(complexFloatVector.data(),coefBuffer,sizeof(float)*20);
I tried many kinds of casting and could not come up with a better solution.
Any suggestions appreciated.
Don't overthink it
complexFloatVector.resize(10);
for (size_t i = 0; i < 10; i++)
{
complexFloatVector[i] = std::complex<float>((float)(packet.coef[i * 2]), (float)(packet.coef[i * 2 + 1]));
}
I'm assuming complexFloatVector
is a std::vector<std::complex<float>>
type and packet.coef
is an array of 20 integers.