【问题标题】:casting int32_t to std::complex<float>将 int32_t 转换为 std::complex<float>
【发布时间】:2021-12-29 07:46:49
【问题描述】:

我通过有线协议接收一些数据。我收到的其中一个数据包有一些表示复数的 int32_t 值。即 10 个复数以 20 个 int32_t 值(real,imag)的形式出现。

我需要将 int32_t 转换为 float 并将这些值复制到 vector<:complex>>。我不确定执行此操作的首选方法。

这可行,但肯定很丑陋且非常值得怀疑。这是一个 sudo 实时系统,我需要尽可能快的操作。

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);

我尝试了多种类型的铸造,但无法提出更好的解决方案。

任何建议表示赞赏。

【问题讨论】:

  • 这个部分你计时了吗?需要多长时间?

标签: c++ casting transform memcpy


【解决方案1】:

怎么样:

for ( uint32_t j=0; j<10; ++j ) {
    complexFloatVector[j] = std::complex<float>(packet.coef[2*j],packet.coef[2*j+1]);
}

【讨论】:

    【解决方案2】:

    别想太多

    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]));
    }
    

    我假设complexFloatVectorstd::vector&lt;std::complex&lt;float&gt;&gt; 类型,packet.coef 是一个包含 20 个整数的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2018-11-29
      相关资源
      最近更新 更多