大端小端(概念、应用、如何判断)

大端小端

区别
大端:低位放在高地址,高位放在低地址(0x12中1是高位,2是低位)
小端:低位放在低地址,高位放在高地址

举例
假设一个类型为int的变量x,x的首地址为0x100即&x的值为0x100。那么x的4个字节被存储在存储器的0x100,0x101,0x102,0x103的位置。x 的值为16进制 0x12345678。
在这里插入图片描述

应用

编写网络程序时,主机之间通过网络相互通信,不同主机之间可能采用不用的存储方法,而且网络字节序和主机字节序也有可能不同。
在这里插入图片描述
网络和主机转换函数
n 代表的就是 network,h 代表的是 host,s 表示的是 short,l 表示的是 long,分别表示 16 位和 32 位的整数。

uint16_t htons (uint16_t hostshort)
uint16_t ntohs (uint16_t netshort)
uint32_t htonl (uint32_t hostlong)
uint32_t ntohl (uint32_t netlong)

如何判断是大端还是小端

我们可以根据联合体来判断该系统是大端还是小端。因为联合体变量总是从低地址存储。

void judge()
{
    
    
    union
    {
    
    
        int i;
        char c;
    }un;
    un.i = 1;

    if (un.c == 1)
        printf("小端\n");
    else
        printf("大端\n");
}

猜你喜欢

转载自blog.csdn.net/qq_36459662/article/details/113954551