【发布时间】:2017-12-03 19:58:37
【问题描述】:
我收到 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;
}
很抱歉,我知道它仍然行不通,它只是代表这个想法。
如果你能照亮我。
非常感谢,
让-弗朗索瓦
【问题讨论】:
-
“表示 8 个浮点数”到底是怎么回事?
-
一个赋值使之前对同一个对象的所有赋值无效,所以整个循环体等价于
concat_value[i] = (concat_value[i] & buffer[4 * i + 9 + 0]);。 -
几个问题:
buffer的类型是unsigned char[]还是int[]?您将缓冲区直接分配给concat_value,即int[]。 `unsigned char[] 相当于 c++ 中的字节。额外的 + 9 有什么用?您的数据是否以某种方式偏移?您使用的代码不会从缓冲区索引 0-8 中读取任何数据。 -
&删除数据,不添加数据。 -
你可能只是
memcpy从缓冲区到浮动,但这取决于确切的表示和字节序。
标签: c++