跨平台端序转换

时间:2018-03-02 22:58:49

标签: c++ endianness generic-programming

我已编写此代码以在主机和网络字节序之间进行转换,并发现两个方向的实现方式相同。是对的吗?

template<typename T>
T be_to_host(T val)
{
    T outval = 0;
    std::size_t len = sizeof(T);
    char *data = reinterpret_cast<char*>(&outval);
    // network endian (big) to host endian
    for (int i = 0; i < len; i++)
        data[i] = (val >> ((len - i - 1) * 8)) & 0xFF;

    return outval;
}

template<typename T>
T host_to_be(T val)
{
    // works both ways on any platform
    return be_to_host<T>(val);
}

我已经说服自己这段代码没问题,但我总是看到每个方向都有不同的实现方式,所以我无法摆脱那种我缺少某些东西的感觉。事实上&#39; val&#39;被解释为host endianness使这个代码双向,对吧?

由于

1 个答案:

答案 0 :(得分:0)

如果字节顺序不同,那么在任一方向上任务都是颠倒字节的顺序,所以是的,任一方向的实现都是相同的。