在网络编程中,大小端转换是经常的事。而Linux也有封装好的大小端转换的处理。
可能通过以下步骤来找到linux下的大小端转换是怎么操作的。
在终端下运行以下命令找到linux系统中的endian.h的位置。
locate endian.h
以下是我的电脑找出的结果。
用vim(或者其他编辑器)打开第一个endian.h,可以看到endian.h文件很简单。里面包含了一个<bits/byteswap.h>的头文件。而下是一些宏定义。如果你做过linux下的网络编程,可能会觉得这些宏有点眼熟。
再用locate找到byteswap.h的位置。
在我的计算机中是下面那条记录。再打开这个文件。
可以发现,这个文件也很简单,他的处理都是使用宏来进行转换。宏有什么缺点,大家都知道了。C++的思想是推荐大家使用inline函数来替换宏。这里我对这些宏封装成了函数。以下是主要的代码。
16位的转换:
template <typename T16>
T16 Endian::swap16(const T16 &v)
{
assert(sizeof(T16) == 2);
return