美文网首页
字节序大端与小端

字节序大端与小端

作者: videring | 来源:发表于2020-03-02 14:05 被阅读0次

参考1
参考2
参考3

C程序映射中内存的空间布局大致如下:

最高内存地址 0xFFFFFFFF
栈区(从高内存地址,往 低内存地址发展)
堆区(从低内存地址 ,往 高内存地址发展)
全局区(常量和全局变量)
代码区

最低内存地址 0x00000000
什么是字节序?

字节序,简单来说,就是指的超过一个字节的数据类型在内存中存储的顺序

那么就很明显了,像char这样的类型,肯定不存在字节序的问题了。

字节序分为哪几类?

大端字节序:
高位字节数据存放在低地址处,低位数据存放在高地址处;
小段字节序:
高位字节数据存放在高地址处,低位数据存放在低地址处;
网络字节序:
TCP/IP协议传输数据时,字节序默认大端

重点来了

首先看什么是高地地址

在内存中,栈是向下生长的,以char arr[4]为例,(因为char类型数据只有一个字节,不存在字节序的问题)依次输出每个元素的地址,可以发现,arr[0]的地址最低,arr[3]的地址最高,如图:

接下来看什么是高低位

给一个十进制整数,123456,很明显左边的是高位,右边的是低位。计算机也是这样认为的。给一个16进制数,0x12345678,以字节为单位,从高位到低位依次是 0x12、0x34、0x56、0x78。

下来将高地地址和高低位对应。

一个整形占4个字节,给一个整形数据0x12345678,如果是大端存储,存储格式如下:

如果是小端存储,存储格式如下:

那如何判断当前系统是大端还是小端呢?

最简单地来说,我们可以用 1 为例,1在栈中存储的大小端格式分别如下图所示,

如果我们可以得到 1 在内存中存储的第一个字节,那么我们就可以知道当前系统是大端存储还是小端存储了。

测试代码如下:

// C语言
#include <stdio.h>
int main()
{
    int a = 1;
    char pc = *(char*)(&a);
    if (pc == 1)
        printf("第一个字节为1,小端存储\n");
    else
        printf("第一个字节为0,大端存储\n");
 
    return 0;
}
// js
var buffer = new ArrayBuffer(8)
var uint32 = new Uint32Array(buffer)
uint32[0] =1
if (uint8[0] === 1) {
  console.log("第一个字节为1,小端存储")
} else {
  console.log("第一个字节为0,大端存储")
}

相关文章

  • 字节序

    端模式分为小端字节序与大端字节序。 1. 小端字节序(Little Endian, LE)低字节存于内存低地址,高...

  • Linux的socket API基本操作

    1.socket地址API 主机字节序和网络字节序 字节序分为大端字节序和小端字节序 大端字节序 = 一个整数的高...

  • socket编程基础

    字节序 字节序分为大端字节序和小端字节序大端字节序: 是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内...

  • 内存序、字面量、动态规划

    内存字节序 确认内存字节序 /* 确定你的电脑是大端字节序还是小端字节序 */include int check...

  • 字节序大端与小端

    参考1参考2参考3 C程序映射中内存的空间布局大致如下: 最低内存地址 0x00000000什么是字节序? 字节序...

  • (转)字节序、大端序与小端序及其相关转换

    字节序、大端序与小端序及其相关转换https://blog.csdn.net/SwordArcher/articl...

  • 网络通信大端小端转换

    1、 使用说明 大端又叫网络字节序,小端又叫主机字节序,在网络通信传输数据时候,通常是采用大端对齐方式,而在本机电...

  • jsmpeg系列一 基础知识 字符处理 ArrayBuffer

    一、参考字符编码ASCII UTF8 字节序 大端 小端 二、参考[HTML5] ArrayBuffer与类型化数...

  • 理解字节序(转)

    计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。 举...

  • Bitmap ARGB8888 BGRA8888 RGB24 R

    Android使用Java语言,Java默认使用大端字节序,c/c++默认使用小端字节序,当我们在jni中需要使用...

网友评论

      本文标题:字节序大端与小端

      本文链接:https://www.haomeiwen.com/subject/xebmkhtx.html