跨平台端序转换

问题描述 投票:-1回答:1

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

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);
}

我已经说服自己这个代码没问题,但我总是看到每个方向的不同实现,所以我无法摆脱那种我缺少某些东西的感觉。 'val'被解释为主机端的事实使得这个代码是双向的,对吧?

谢谢

c++ endianness generic-programming
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.