C :重新组装4个字节的浮子

C++ : reassembly of a float from 4 bytes

本文关键字:字节 4个 新组装      更新时间:2023-10-16

我正在收到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;
}

对不起,我知道它仍然无法正常工作,它只是代表这个想法。

如果您可以点燃我。

非常感谢,

Jean-François

在您的文本中,您说您的二进制二进制代表性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;
}