Search code examples
c++castingtransformmemcpy

casting int32_t to std::complex<float>


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.


Solution

  • 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.