首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C ++中的big-endian和little-endian值之间进行转换?

如何在C ++中的big-endian和little-endian值之间进行转换?
EN

Stack Overflow用户
提问于 2018-01-05 00:24:50
回答 2查看 0关注 0票数 0

如何在C ++中的big-endian和little-endian值之间进行转换?

EN

回答 2

Stack Overflow用户

发布于 2018-01-05 09:19:27

可以使用以下方法:

对于16位数:

代码语言:javascript
复制
unsigned short _byteswap_ushort(unsigned short value);

对于32位数:

代码语言:javascript
复制
unsigned long _byteswap_ulong(unsigned long value);

对于64位数:

代码语言:javascript
复制
unsigned __int64 _byteswap_uint64(unsigned __int64 value);

8位数字(字符)不需要转换。

可以直接调用:

代码语言:javascript
复制
int32_t __builtin_bswap32 (int32_t x)
int64_t __builtin_bswap64 (int64_t x)
票数 0
EN

Stack Overflow用户

发布于 2018-01-05 10:19:37

可以简单的这么做:

代码语言:javascript
复制
#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)...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档