美文网首页
字节大小端

字节大小端

作者: abb266389fd0 | 来源:发表于2016-07-26 11:37 被阅读244次
  • 大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中(TCP/IP协议规定了在网络上必须采用大端模式)
  • 小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中

例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中;0x22放在高地址中,即0x0011中。小端模式,刚好相反

一个判断当前系统是大端还是小端的函数,小端则返回1:

int checkCPU()
{
    union w
    {
        int a;
        Byte b[4];
    } c;
    c.a = 1;
    return(c.b[0] ==1);
}

以上函数,若在小端系统下,其字节序为,b[0]中存储00000001,后三个字节依次存储00000000,大端系统下反之

在iOS开发中,苹果已经为我们定义好了一套用于大小端转换的宏定义:

#defineNTOHL(x)(x) = ntohl((__uint32_t)x)

#defineNTOHS(x)(x) = ntohs((__uint16_t)x)

#defineNTOHLL(x)(x) = ntohll((__uint64_t)x)

#defineHTONL(x)(x) = htonl((__uint32_t)x)

#defineHTONS(x)(x) = htons((__uint16_t)x)

#defineHTONLL(x)(x) = htonll((__uint64_t)x)

NTOHL,network to host,L、S、LL分别对应long、short、long long
HTONL,反之

大小端转换原理如下:
假设一个short类型的数字:0x1122,那么其二进制形式为:00010001 00100010
首先,取出第一个字节,右移八位:

        00010001 00100010

&       11111111 00000000

=       00010001 00000000

>>8     00000000 00010001

然后,取出第二个字节,左移八位:

        00010001 00100010

&       00000000 11111111

=       00000000 00100010

<<8     00100010 00000000

最后,按位或,至此,大小端转换完成:

        00000000 00010001

||      00100010 00000000

==      00100010 00010001

相关文章

  • Java 字段在内存中存储是大端还是小端

    Java 字段在内存中是小端存储的,即低位字节在前,高位字节在后。 大小端的最小单位是字节,即大小端决定的是字节的...

  • 字节大小端

    大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中(T...

  • 大小端字节序

    内存逻辑上是一个大的字节数组,当存储大于一个字节的数据时就有字节序的问题。 大小端经常弄混,这里有种简单的记忆方法...

  • 大小端字节序

    字节序,或字节顺序("Endian"、"endianness" 或 "byte-order"),描述了计算机如何组...

  • 字节对齐与大端小端与内存区域划分

    字节对齐 C语言字节对齐C语言字节对齐/7213465 大端小端 字节序(大小端)详解从高低地址和高低位开始理解(...

  • 数据存储大小端

    大小端 大端(Big-endian):高字节在前,即高字节在低地址处;通俗讲即数据以字节为单位存储,为多个字节,其...

  • 16位数的高低八位

    大小端高位字节在前,低位字节在后称之为大端。反之,为小端。 以下都是基于大端16位二进制数来说,小端反之。 取低八...

  • python 字节序

    阮一峰 - 理解字节序 获取字节顺序 大小端转换 000000000019d6689c085ae165831e93...

  • 字节序

    大小端及网络字节序[https://blog.csdn.net/z_ryan/article/details/79...

  • 判断机器大小端

    大小端定义 大端:是指数据的高字节保存在内存的低地址中小端:是指数据的低字节保存在内存的低地址中 思路: 定义一个...

网友评论

      本文标题:字节大小端

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