字节序

背景知识

  • 计算机系统中以字节为单位。
  • 一个字节为8bit
  • 每个字节对应一个地址单元

大端 & 小端

  • 大端模式(big-endian)
    数据的低位保存在内存的高地址
    数据的高位保存在内存的低地址

以32bit宽的数0x12345678举例:

字节序_第1张图片
大端模式 举例

http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857/

  • 小端模式(little-endian)
    数据的低位保存在内存的低地址
    数据的高位保存在内存的高地址

以32bit宽的数0x12345678举例:

字节序_第2张图片
小端模式 举例

http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857/

  • 大端 & 小端的另一种称呼

字节序_第3张图片
大端 & 小端的另一种称呼

http://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html
理解之后,总结一下,记忆的方法是:
     (数据看成字符串)大端——高尾端,小端——低尾端

本机字节序 & 网络字节序

  • 本机字节序
    可能为小端模式或大端模式。
    如Intel的x86处理器,多字节是用little-endian型式。
  • 网络字节序
    网络上传输的数据存储模式为大端模式。

常用字节序转换函数

  • htonl() - host to network unsigned long

The htonl function converts a u_long from host to TCP/IP network byte order (which is big-endian).
本函数将一个32位数从主机字节顺序转换成网络字节顺序。

  • ntohl() - network to host unsigned long

The htons function converts a u_short from host to TCP/IP network byte order (which is big-endian).

  • htons() - host to network unsigned short
  • ntohs() - network to host unsigned short

References:

http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857/
http://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html

你可能感兴趣的:(字节序)