小端字节序大端字节序
Posted シ゛甜虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小端字节序大端字节序相关的知识,希望对你有一定的参考价值。
现代CPU计算时一次都能装载多个字节(如32位计算机一次装载4字节),多字节的数值在内存中高低位的排列方式会影响所表示的数值,以数值0x01020304为例,在内存中用4个字节存储,4个字节的内容分别是0x01、0x02、0x03、0x04。根据字节高低位排序方式的不同,可以分为:大端字节序(big endian)和小端字节序(little endian)。
大端字节序
大端字节序是指一个整数的高位字节(如上例中的0x01)存储在内存的低地址处,高字节在前。
C语言数组存储例:
0x01020304
bufe[0] = 0x01;
bufe[1] = 0x02;
bufe[2] = 0x03;
bufe[3] = 0x04;
小端字节序
小端字节序把数值的低位字节(如上例中的0x04)存储在内存的低地址处,低字节在前。PC计算机和单片机常见都是小端字节序。
C语言数组存储例:
0x01020304
bufe[0] = 0x04;
bufe[1] = 0x03;
bufe[2] = 0x02;
bufe[3] = 0x01;
常见的memcpy函数复制float字节到数组中,数组中的float就是小端字节序
memcpy(&listDataSoft[0] ,&f,sizeof(float));
主机字节序
现代计算机大多采用小端字节序,所以小端字节序又叫主机字节序。
网络字节序
不同的计算机可能会采用不同的字节序,甚至同一计算机上不同进程会采用不同的字节序,如JAVA虚拟机采用大端字节序,可能和采用小端字节序计算机上的其他进程不同。所以在网络通信(或进程间通信)时,如果都按自己存储的顺序收发数据,有可能会出现一些误解,为了避免这个问题,约定数据在不同计算机之间传递时都采用大端字节序,也叫作网络字节序。通信时,发送方需要把数据转换成网络字节序(大端字节序)之后再发送,接收方再把网络字节序转成自己的字节序。
以上是关于小端字节序大端字节序的主要内容,如果未能解决你的问题,请参考以下文章