写一个c++ longlong 大小端转换的函数
时间: 2023-11-26 09:02:42 浏览: 43
以下是一个C++函数,用于将long long类型的数据从大小端字节序转换为本机字节序或者从本机字节序转换为大小端字节序:
```c++
#include <cstdint>
union EndianConverter {
std::int64_t value;
std::uint8_t bytes[sizeof(std::int64_t)];
};
std::int64_t SwapEndian(std::int64_t value) {
EndianConverter converter;
converter.value = value;
for (std::size_t i = 0; i < sizeof(std::int64_t) / 2; ++i) {
std::uint8_t tmp = converter.bytes[i];
converter.bytes[i] = converter.bytes[sizeof(std::int64_t) - i - 1];
converter.bytes[sizeof(std::int64_t) - i - 1] = tmp;
}
return converter.value;
}
```
在这个函数中,我们使用了一个联合体类型`EndianConverter`,它包含了一个`std::int64_t`类型的数据成员`value`和一个`std::uint8_t`类型的数组成员`bytes`,它们共享了同一块内存空间。我们首先将输入的数据值存入到`value`中,然后将其转换为一个字节数组`bytes`,并且通过交换数组中的字节顺序来进行字节序转换。最后,我们将转换后的字节数组重新组装成一个`std::int64_t`类型的数据,并且返回给调用者。
使用该函数,可以像下面这样将一个long long类型的数据从大端字节序转换为本机字节序:
```c++
std::int64_t value = 0x1122334455667788LL;
std::int64_t swapped = SwapEndian(value);
```
或者从本机字节序转换为大端字节序:
```c++
std::int64_t value = 0x1122334455667788LL;
std::int64_t swapped = SwapEndian(value);
std::int64_t big_endian = SwapEndian(swapped);
```