我已编写此代码以在主机和网络字节序之间进行转换,并发现两个方向的实现方式相同。是对的吗?
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使这个代码双向,对吧?
由于
答案 0 :(得分:0)
如果字节顺序不同,那么在任一方向上任务都是颠倒字节的顺序,所以是的,任一方向的实现都是相同的。