大端小端模式判断

大端小端模式判断

介绍

  • 小端模式(Little Endian) : 变量的高字节放在内存的高地址中,变量的低字节放在内存的低地址中

  • 大端模式(Big Endian):变量的高字节放在内存的低地址中,变量的低字节放在内存的高地址中(采用大端方式进行数据存放符合人类的正常思维)

举例子:

对于int类型变量x=0x30313233;
大端模式存放,内存低地址到高地址为: 0x30、0x31、0x32、0x33;
小端模式存放,内存低地址到高地址为:0x33,0x32,0x31,0x30;

内存低地址到高地址实例

代码判断:

# include <stdio.h>

int main ( ) {
    // 使用共用体union 
    union  {
    int a;
    char b;
    } UN;


    UN.a = 1;
    /*  对于union低地址对齐,若 ina a = 1(0x00000001),
        内存从小到大依次放的是:0x01 0x00 0x00 0x00
        按照 char* 方式存取,取得 b为0x01 时,为小端模式
    */    
    if (UN.b == 1){
        printf("小端模式\n");
    } else{
        printf("大端模式\n");
    }

    return 0;
}

机器使用endian模式:

  • x86(win7等),ARM,DSP,主机都为小端模式

  • 网络字节序采用 大端模式

在网络编程中,字节序转换一般使用 <arpa/inet.h> 中的转换函数:

- uint32_t htonl(uint32_t hostlong); /*主机字节序到网络字节序的长整型转换*/
- uint16_t htons(uint16_t hostshort); /*主机字节序到网络字节序的短整型转换*/
- uint32_t ntohl(uint32_t netlong); /*网络字节序到主机字节序的长整型转换*/
- uint16_t ntohs(uint16_t netshort); /*网络字节序到主机字节序的短整型转换*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值