计算机存储,字节分为大端和小端

简介: 计算机存储,字节分为大端和小端

1:认识

对于一个int类型的数字,如int data=0x01234567; 最高位是0x01 最低位是 0x67

大端存储: 高位字节排在内存的低地址,低位字节排在内存的高地址端 ==》符合我们的阅读

小端存储:低位字节排在内存的低地址 高位字节排在内存的高地址端 ==》计算机电路先处理低位字节,效率较高

2:demo

//测试本机是大端还是小段:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
int main()
{
  int data=0x01234567;   //高字节是0x01 
  //以十六进制输出数据 及该数据对应的地址
  printf("data:[%x] data_addr:[%p] \n",data, &data);
  char *c_data = (char *)&data;
  for(int i=0; i<4;i++)
  {
    printf("addr[%p]==>%x \n", c_data+i, *(c_data+i));
  }
  //高位字节排在内存的低地址,低位字节排在内存的高地址端 为大端
  //低位字节排在内存的低地址  高位字节排在内存的高地址端 为小端
  if(*c_data == 0x01)  //低位存高字节
  {
    printf("this is big endian\n");
  }else{   //低位存低字节
    printf("this is little endian\n");
  }
  //字节序的转换
  data = htonl(data);
  printf("data is :%x data_addr:[%p] \n", data, &data);
  for(int i=0; i<4;i++)
  {
    printf("addr[%p]==>%x \n", c_data+i, *(c_data+i));
  }
  return 0;
}
/*************************************************
hlp@ubuntu:~/0922$ ./big
data:[1234567] data_addr:[0x7ffcd98f44a8] 
addr[0x7ffcd98f44a8]==>67 
addr[0x7ffcd98f44a9]==>45 
addr[0x7ffcd98f44aa]==>23 
addr[0x7ffcd98f44ab]==>1
根据输出结果,说明我的电脑内存是小端
计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。
  所以,计算机的内部处理都是小端字节序。
但是,人类还是习惯读写大端字节序。
  所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,
  比如网络传输和文件储存
*************************************************/
目录
相关文章
|
6月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
405 1
|
存储 C语言
大端存储和小端存储
1.大小端字节序 2.大端存储 3.小端存储 4.为什么会有大小端存储模式之分? 5.如何判断当前机器是大端存储还是小端存储 方法1 方法2
2985 0
|
2月前
|
Java
Byte 高位/低位简介绍(大端格式/小端格式)
Byte 高位/低位简介绍(大端格式/小端格式)
123 1
|
6月前
大端法和小端法
大端法和小端法
52 2
|
6月前
|
存储 小程序 编译器
什么是“大小端字节序”存储模式?
这篇内容讨论了计算机内存中存储整型变量的方式,特别是针对不同字节序(大端和小端)的概念。文章首先解释了正负整数在内存中以补码形式存储的规则,然后提出了一个问题:当一个4字节的整数在内存中存储时,其字节是如何分布的?接着,文章引入了大端字节序和小端字节序的概念,其中大端模式将高位字节存储在低地址,小端模式则相反。文章通过示例说明了两种存储模式的区别,并提供了一道题目来判断当前机器使用的字节序。最后,给出了一个简单的程序来检测系统是大端还是小端。
98 0
什么是“大小端字节序”存储模式?
|
存储
大端法与小段法的区别
大端法与小段法的区别
311 0
|
存储 小程序 编译器
大小端字节序详解
在开始正文之前,我想先问一下大家,内存中是怎样存放一个数的?当然啊,我这里问的不是数据存储的形式(比如整数存原码,负数存补码),而是一个数据存放的顺序 我们先看下面这个例子,当我们看看当把十六进制函数0x11223344存进内存中会是怎么样的。
大小端字节序详解
|
存储 编译器 C语言
|
存储 小程序 编译器
整型在内存中的存储(详细剖析大小端)——“C”
整型在内存中的存储(详细剖析大小端)——“C”