大端法与小端法

小端法(little endian),就是将最有效字节放在前面

大端法(big endian),就是将最有效字节放在前面

小端法违反直觉,但是主流操作系统都用这个,平时我们用的都是小端法

大端法符合习惯,用于网络字节流

 

需要澄清:

1. 具体字节是顺序排列还是倒序排列,是就一个具体的数据内部而言的。也就是说,数据与数据之间永远都是顺序存放,大端小端不会影响数据以外的内容(比如字符对齐产生的多余空间)

2. 字符串永远都是顺序存放,因此具有更好的跨平台性

 

实验1:

#include <stdio.h>
#include <netinet/in.h>

int main()
{
    printf("little endian:\n");
    short n = 0x1234;
    for(int i = 0; i < sizeof(n); ++i){
        printf("%x\n", *((char*)&n + i));
    }
    printf("big endian:\n");
    n = htons(n); // 将一个小端表示的短整型转为大端表示
    for(int i = 0; i < sizeof(n); ++i){
        printf("%x\n", *((char*)&n + i));
    }
    return 0;
}

结果:

little endian:
34
12
big endian:
12
34

实验2:

#include <stdio.h>
#include <string.h>

struct node
{
    short s;
    int n;
} a;


int main()
{
    printf("sizeof(node) = %d\n", sizeof(a));
    memset(&a, 0, sizeof(a));
    a.s = 0x0123;
    a.n = 0x01234567;
    for(int i = 0; i < sizeof(a); ++i){
        printf("%02x\n", *((char*)&a+i));
    }
    return 0;
}

结果:

sizeof(node) = 8
23
01
00
00
67
45
23
01

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值