我的类(class)正在接收一个复数浮点 vector ,但数据流数据包必须包含尽可能短的数据。我的解决办法是先把数据转成short,然后batch成包,发过去。转换此数据的最佳方法是什么?
复杂数据应映射到两个单独的变量:例如,vcfSampleData[0].real()
-> m_pData[0]
和 vcfSampleData [0].imag()
-> m_pData[1]
等等。
void BufferSampleData(const std::vector<std::complex<float>>& vcfSampleData, const float& fTotalGain_dB, const Frequency& CentreFrequency, const Bandwidth& cBandwidth, const TimeStamp& tCaptureTime, const SampleRate& SampleRate)
{
sBufferData* pWriteElement = m_SampleBuffer.GetWriteElement();
if(pWriteElement != nullptr) {
std::copy(vcfSampleData.begin(), vcfSampleData.end(), pWriteElement->m_pData); //vector<comlex<float>> must become vector<complex<short>> or vector<short>
//other irrelevant stuff here
m_SampleBuffer.CommitWriteElement();
}
}
最佳答案
没有 std::
函数可以满足您的要求,您只需编写一个循环
pWriteElement->m_pData.reserve(vcfSampleData.size() * 2);
pWriteElement->m_pData.clear();
for (auto cmpl : vcfSampleData)
{
pWriteElement->m_pData.push_back(cmpl.real());
pWriteElement->m_pData.push_back(cmpl.imag());
}
关于c++ - 有没有一种优雅的方法可以将 vector<complex<float>> 转换为 vector<short>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43657872/