C ++:从4个字节重组浮点数

时间:2017-12-03 19:58:38

标签: c++

我正在接收8组4个字符,代表8个浮点数,但我正在努力用C ++重组它们。

编辑表达这个想法(这段代码显然是错误的):

// Re-assembly of 32 bytes into 8 float
float concat_value[8];
for (int i = 0; i < 8; i ++) {
concat_value[i] = buffer[4 * i + 3];
concat_value[i] = concat_value[i] << 8;
concat_value[i] = (concat_value[i] & buffer[4 * i + 2]);
concat_value[i] = concat_value[i] << 8;
concat_value[i] = (concat_value[i] & buffer[4 * i + 1]);
concat_value[i] = concat_value[i] << 8;
concat_value[i] = (concat_value[i] & buffer[4 * i + 0]);
std::cout << "   concat_value: " << concat_value[i] << std::endl;
}

对不起,我知道它仍然不起作用,它只是代表了这个想法。

如果你可以照亮我。

非常感谢,

让弗朗索瓦

1 个答案:

答案 0 :(得分:-3)

在你的文本中,你说你在缓冲区中有8个浮点数的二进制表示。但是你的代码远非如此。

根据你的代码,似乎缓冲区是浮点数的小端表示,所以我假设你在x86上进行编译。因此,如果这些假设是正确的,则此代码应该有效:

float concat_value[8];
for (int i = 0; i < 8; i ++) {
    concat_value[i] = *reinterpret_cast<float*>(buffer+i*sizeof(float));
    std::cout << "   concat_value: " << concat_value[i] << std::endl;
}

如果您的目标是将concat_value保留在浮点数的组成部分中,那么:

int concat_value[8];
for (int i = 0; i < 8; i ++) {
    float v = *reinterpret_cast<float*>(buffer+i*sizeof(float));
    std::cout << "   concat_value: " << v << std::endl;
    concat_value[i]=v;
}