如何在C ++中的big-endian和little-endian值之间进行转换?
发布于 2018-01-05 09:19:27
可以使用以下方法:
对于16位数:
unsigned short _byteswap_ushort(unsigned short value);
对于32位数:
unsigned long _byteswap_ulong(unsigned long value);
对于64位数:
unsigned __int64 _byteswap_uint64(unsigned __int64 value);
8位数字(字符)不需要转换。
可以直接调用:
int32_t __builtin_bswap32 (int32_t x)
int64_t __builtin_bswap64 (int64_t x)
发布于 2018-01-05 10:19:37
可以简单的这么做:
#include <climits>
template <typename T>
T swap_endian(T u)
{
static_assert (CHAR_BIT == 8, "CHAR_BIT != 8");
union
{
T u;
unsigned char u8[sizeof(T)];
} source, dest;
source.u = u;
for (size_t k = 0; k < sizeof(T); k++)
dest.u8[k] = source.u8[sizeof(T) - k - 1];
return dest.u;
}
用法:swap_endian<uint32_t>(42)
...
https://stackoverflow.com/questions/-100004128
复制相似问题