我已编写此代码以在主机和网络字节序之间进行转换,并发现两个方向的实现是相同的。是对的吗?
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'被解释为主机端的事实使得这个代码是双向的,对吧?
谢谢
如果字节序不同,那么在任一方向上任务都是颠倒字节的顺序,所以是的,任一方向的实现都是相同的。