网络编程中的大端和小端

主机字节序

主机字节序是指字节序在内存中保存的顺序,这个叫做主机字节序,常见的存储方式分为大端模式和小端模式。两者的区别在于前者将大端(高位字节)存放在低位地址中,而将小端(地位字节)存放在高位地址中;后者则恰好相反。

什么是高位字节和低位字节呢?

以0x12345678为例,其一共占了四个字节,从0x12到0x78为高字节到低字节。

网络字节序

网络字节序是TCP/IP规定好的一种数据表示格式,其与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确的解释。网络字节序为大端序。

网络传输过程中的字节序转换

在网络传输的过程中,接收方接收到的第一个字节将存放到接收方内存的低地址中,而发送方发送的第一个字节同样也是从发送方内存的低地址处开始发送。如果接收方和发送方具有相同的字节序则在网络传输的过程中无需进行字节序的转换。但是如果接收方和发送方的字节序不同的话,则在网络传输过程必须要进行转换,不然就会造成错误的收发数据。而字节序的转换当然就是用的字节转换函数了。htons,htonl,ntohs,ntohl。这四个函数在进行转换时如果当前平台是大端则不进行转换直接返回,否则进行转换。

什么样的数据需要在传输的过程中进行转换呢?

小端序和大端序中,区别在低地址存低位还是高位的区别,所以字节序中低位和高位仅仅针对大于一个字节的组合内存空间,例如int就是四个字节,而对于字符来说,一个字符为1个字节恰好就是1个字节单元,其没有前后之分。但是对于int等类似的数据时就会需要进行字节序的转换。

你可能感兴趣的:(网络编程中的大端和小端)