精华内容
下载资源
问答
  • 关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。也...

    关于字节序(大端法、小端法)的定义

    《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。

    也可以说:

    1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。

    2.大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。

    举个简单的例子,对于整形0x12345678。它在大端法和小端法的系统内中,分别如图1所示的方式存放。

    2b22956f4f782012bfbefab65e172102.png

    网络字节序

    我们知道网络上的数据流是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它是将这个字节作为高位还是低位来处理呢?

    网络字节序定义:收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。

    网络字节序说是大端字节序。

    比如我们经过网络发送0x12345678这个整形,在80X86平台中,它是以小端法存放的,在发送前需要使用系统提供的htonl将其转换成大端法存放,如图2所示。

    1bfd32d82c05b18120e34d3fd560fe2e.png

    字节序测试程序

    不同cpu平台上字节序通常也不一样,下面写个简单的C程序,它可以测试不同平台上的字节序。

    1

    #include

    2

    #include

    3

    intmain()

    4

    {

    5

    inti_num=0x12345678;

    6

    printf("[0]:0x%x\n",*((char*)&i_num+0));

    7

    printf("[1]:0x%x\n",*((char*)&i_num+1));

    8

    printf("[2]:0x%x\n",*((char*)&i_num+2));

    9

    printf("[3]:0x%x\n",*((char*)&i_num+3));

    10

    11

    i_num=htonl(i_num);

    12

    printf("[0]:0x%x\n",*((char*)&i_num+0));

    13

    printf("[1]:0x%x\n",*((char*)&i_num+1));

    14

    printf("[2]:0x%x\n",*((char*)&i_num+2));

    15

    printf("[3]:0x%x\n",*((char*)&i_num+3));

    16

    17

    return0;

    18

    }

    在80X86CPU平台上,执行该程序得到如下结果:

    [0]:0x78

    [1]:0x56

    [2]:0x34

    [3]:0x12

    [0]:0x12

    [1]:0x34

    [2]:0x56

    [3]:0x78

    分析结果,在80X86平台上,系统将多字节中的低位存储在变量起始地址,使用小端法。htonl将i_num转换成网络字节序,可见网络字节序是大端法。

    总结点:80X86使用小端法,网络字节序使用大端法。

    posted on 2009-12-31 21:33 何克勤 阅读(31112) 评论(0)  编辑  收藏 所属分类: 其他

    展开全文
  • 大端法和小端法

    2020-07-27 00:10:15
    大端法就是最高有效字节放在低地址,小端法就是最低有效字节放在低地址; 这两者的区别在于,低地址放的是高有效字节(大端法)还是低有效字节(小端法

    大端法就是最低有效字节放在高地址,小端法就是最低有效字节放在低地址;
    这两者的区别在于,低地址放的是高有效字节(大端法)还是低有效字节(小端法)

    展开全文
  • 大端法与小端法

    2020-06-30 17:08:02
    小端法(little endian),就是将最低有效字节放在前面,表示为 0x34 0x12 大端法(big endian),就是将最高有效字节放在前面,表示为 0x12 0x34 小端法违反直觉,但是主流操作系统都用这个 大端法符合习惯,...

    小端法(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

     

    展开全文
  • 关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。 ...
  • 关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。也...

    关于字节序(大端法、小端法)的定义

    《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。

    也可以说:

    1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。

    2.大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。

    举个简单的例子,对于整形0x12345678。它在大端法和小端法的系统内中,分别如图1所示的方式存放。

    2b22956f4f782012bfbefab65e172102.png

    网络字节序

    我们知道网络上的数据流是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它是将这个字节作为高位还是低位来处理呢?

    网络字节序定义:收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。

    网络字节序说是大端字节序。

    比如我们经过网络发送0x12345678这个整形,在80X86平台中,它是以小端法存放的,在发送前需要使用系统提供的htonl将其转换成大端法存放,如图2所示。

    1bfd32d82c05b18120e34d3fd560fe2e.png

    字节序测试程序

    不同cpu平台上字节序通常也不一样,下面写个简单的C程序,它可以测试不同平台上的字节序。

    1

    #include

    2

    #include

    3

    intmain()

    4

    {

    5

    inti_num=0x12345678;

    6

    printf("[0]:0x%x\n",*((char*)&i_num+0));

    7

    printf("[1]:0x%x\n",*((char*)&i_num+1));

    8

    printf("[2]:0x%x\n",*((char*)&i_num+2));

    9

    printf("[3]:0x%x\n",*((char*)&i_num+3));

    10

    11

    i_num=htonl(i_num);

    12

    printf("[0]:0x%x\n",*((char*)&i_num+0));

    13

    printf("[1]:0x%x\n",*((char*)&i_num+1));

    14

    printf("[2]:0x%x\n",*((char*)&i_num+2));

    15

    printf("[3]:0x%x\n",*((char*)&i_num+3));

    16

    17

    return0;

    18

    }

    在80X86CPU平台上,执行该程序得到如下结果:

    [0]:0x78

    [1]:0x56

    [2]:0x34

    [3]:0x12

    [0]:0x12

    [1]:0x34

    [2]:0x56

    [3]:0x78

    分析结果,在80X86平台上,系统将多字节中的低位存储在变量起始地址,使用小端法。htonl将i_num转换成网络字节序,可见网络字节序是大端法。

    总结点:80X86使用小端法,网络字节序使用大端法。

    posted on 2009-12-31 21:33 何克勤 阅读(31111) 评论(0)  编辑  收藏 所属分类: 其他

    展开全文
  • 对于跨越多个字节的数据类型(比如 int 长 4 个字节),如何在内存中对这些字节进行排序有两种常见的方法:大端法(Big-endian)和小端法(Little-endian)【注】首先不管是大端法还是小端法存储,计算机在内存中存放数据...
  • 什么是大端法和小端法? 在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中的最小地址。 例如,假设一个类型为int的变量x的地址为0x100,即&x的值为0x100。那么x的4个字节将...
  • 大端法与小端法计算机存储数据都是从低地址到高地址,如0x100到0x103存储,而大端法和小端法的区别就是存储数据时是取数据的低位存放在高地址还是高位存放在高地址。大端法:数据低位存放高地址。小端法:数据高位...
  • 对于跨越多个字节的数据类型(比如 int 长 4 个字节),如何在内存中对这些字节进行排序有两种常见的方法:大端法(Big-endian)和小端法(Little-endian)【注】首先不管是大端法还是小端法存储,计算机在内存中...
  • 大端法、小端法、网络字节序 转 关于字节序(大端法、小端法)的定义 《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;...
  • 一、什么是大端法、小端法 假设变量 x 的类型为 int,位于地址 0x100 处,它的 16 进制值为 0x01234567,地址范围 0x100 ~ 0x103 的字节顺序依赖于机器的类型: 大端法,就是按照地址从低到高的顺序,先存储数据高位...
  • 对于跨越多个字节的数据类型(比如 int 长 4 个字节),如何在内存中对这些字节进行排序有两种常见的方法:大端法(Big-endian)和小端法(Little-endian) 【注】首先不管是大端法还是小端法存储,计算机在内存中...
  • 大端法、小端法及其判断方法

    千次阅读 2018-09-04 21:43:48
    计算机存储数据都是从低地址到高地址,如0x100到0x103存储,而大端法和小端法的区别就是存储数据时是取数据的低位存放 在高地址还是高位存放在高地址。 大端法:数据低位存放高地址。 小端法:数据高位存放高地址...
  • 大端法还是小端法区别

    千次阅读 2016-05-03 16:03:01
    首先不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址,所不同的是首先取低字节的数据存放在低地址还是取高字节数据存放在低地址。 若首先取高字节的数据存放在低地址,则是大端法;...
  • 什么是大端法和小端法? 在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中的最小地址。 例如,假设一个类型为int的变量x的地址为0x100,即&amp;x的值为0x100。那么x的4个...
  • 所谓小端法,就是指数据的低字节放在低地址 一般,Linux和Windows采用的是小端法表示,Sun是大端法表示。这两种表示其实没区别,但不知道为什么人们总是为之争得面红耳赤… 现在来做个实验,在Linux64平台和Windows...
  • 下面这个代码演示了CPU是采用大端法还是采用小端法 int main() { union MyUnion { int a; char b; }; MyUnion mu; mu.a = 1; if (mu.b == 1) { printf("xiaoduan"); } if (mu.b == 0) { printf(...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,819
精华内容 727
关键字:

小端法