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

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

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
根据输出结果,说明我的电脑内存是小端
计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。
  所以,计算机的内部处理都是小端字节序。
但是,人类还是习惯读写大端字节序。
  所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,
  比如网络传输和文件储存
*************************************************/
目录
相关文章
|
3月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
63 1
|
7月前
|
存储 C语言
大端存储和小端存储
1.大小端字节序 2.大端存储 3.小端存储 4.为什么会有大小端存储模式之分? 5.如何判断当前机器是大端存储还是小端存储 方法1 方法2
1809 0
|
7月前
|
存储
大端法与小段法的区别
大端法与小段法的区别
96 0
|
10月前
|
存储 编译器 C语言
【大小端问题】
大小端是什么? 计算机在内存存储中有两中存储模式: 大端字节序存储模式和小端字节序存储模式。 大端存储模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。 小端存储模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
|
存储 小程序 编译器
整型在内存中的存储(详细剖析大小端)——“C”
整型在内存中的存储(详细剖析大小端)——“C”
|
存储 编译器 C语言
|
存储 小程序 编译器
大小端字节序详解
在开始正文之前,我想先问一下大家,内存中是怎样存放一个数的?当然啊,我这里问的不是数据存储的形式(比如整数存原码,负数存补码),而是一个数据存放的顺序 我们先看下面这个例子,当我们看看当把十六进制函数0x11223344存进内存中会是怎么样的。
大小端字节序详解
大端和小端模式
大端和小端模式