美文网首页
网络编程之大小端

网络编程之大小端

作者: zhimingcow | 来源:发表于2018-09-01 00:31 被阅读12次

    大端&小端

    用C/C++写网络程序时,要注意字节的网络顺序和主机顺序的问题。

    • 大端:高位在前,低位在后
    • 小端:高位在后,低位在前

    假设unsigned int num = 0x12345678,内存起始位置为0x4000,则在内存中的存放顺序为:

    内存地址 小端模式 大端模式
    0x4000 0x78 0x12
    0x4001 0x56 0x34
    0x4002 0x34 0x56
    0x4003 0x12 0x78

    网络字节顺序&主机字节顺序

    • 网络字节顺序:网络会将收到的第一个字节作为高位,并依次存放,即大端模式
    • 主机字节顺序:跟cpu有关,如Inter的cpu采用小端模式,IBM的cpu采用大端模式

    也就是说我们在发送一个多字节数值的时候,需要确保发送前是大端模式,接收方再将大端模式转换为本机的大端或小端模式,即:

    • 发送者:在内存中应该以大端方式存放,即调用htonl()或htons()
    • 接收端:将网络字节顺序转换为主机字节顺序,即调用ntohl()或ntohs()

    注意

    数字所占位数小于或等于一个字节(8 bits)时,不要用htons转换。这是因为对于主机来说,大小尾端的最小单位为字节(byte)。

    相关文章

      网友评论

          本文标题:网络编程之大小端

          本文链接:https://www.haomeiwen.com/subject/prkywftx.html