c++ - 交换 float 组中的字节

标签 c++ endianness

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

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 循环并使其计算效率更高。

最佳答案

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

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

关于c++ - 交换 float 组中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27491770/

相关文章:

c# - 在 C# 中使用 pinvoke 从动态链接库调用成员级函数?

c++ - C++ 模板函数调用不在范围内

c - 确定大端或小端机器的宏定义?

java - Netty:在 ChannelBuffer 中来回交换 ByteOrder

c# - UWP 不支持的 API

c++ - STL 如何在 erase() 之后保存迭代器

c++ - 如何访问内存映射 USB 主机 Controller 寄存器?

c++ - C语言在不同架构上的文件操作

.net - 让 BitConverter 使用 Big Endian

include - _byteswap_uint64 和 _byteswap_ulong 的跨平台定义