【问题标题】:swapping bytes in float array交换浮点数组中的字节
【发布时间】:2014-12-15 19:38:01
【问题描述】:

我目前正在研究一种二进制文件格式,其中数据表示为浮点数组,并且数据始终应该使用小端表示形式写入。所以,目前我做的事情如下:

float * swapped_array = new float[length_of_array];

for (int i = 0; i < length_of_array; ++i) {
    swapped_array[i] = swap_float(input_array[i]);
}

这里 swap_float 交换浮点值的四个字节。现在,我想知道是否有一种方法可以跨平台执行此操作,而无需使用此 for 循环进行迭代并使其计算效率更高。

【问题讨论】:

标签: c++ endianness


【解决方案1】:

在我看来,您可以使用一些指针算法来交换字节:

byte mem;
byte* first = (byte*) floatpointer;
mem = *first;
*first = *(first+0x03);
*(first+0x03) = mem;
first++;
mem = *first;
*first = *(first+0x01);
*(first+0x01) = mem;

【讨论】:

  • 我不应该以某种方式考虑给定平台上浮动的大小...我认为这是假设浮动是 4 个字节?
  • 嗯,有可能,会做一个小的重写。
  • 是的,我会整理的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多