我正在接收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;
}
对不起,我知道它仍然不起作用,它只是代表了这个想法。
如果你可以照亮我。
非常感谢,
让弗朗索瓦
答案 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;
}