关于大、小端的那些事

简介: 关于大、小端的那些事

什么是大、小端


大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在地址的低地址中。

小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在地址的高地址中。


图解


我们知道,在内存中数据的存储及计算都是通过转化为二进制来进行的,为了方便我们直观感受电脑都会转化为16进制来表示出来,如下图:


d1afd090579a656ab56c7e20c32d239d_8f7a949aef28409b8e67316ed8796dfd.jpg


我们可以看出它是字节为单位来存储的(一个 int 型有4个字节,一个字节八个比特位,4个比特位存储一个十六进制的数)低位的44存在地址:0x00CFFBF0处,高位的11存在0x00CFFBF3处,这就是小端字节序存储。


大、小端存储模式如下图:


8778f9b8204f49298ea5652dcf5932c0_ebc0f812bb7b47e1a6e4a181a1570356.jpg


如何用代码来测试当前机器的字节序?


假设用 1 来测试,那么写成 16 进制就是 0x00000001,我们假设它是小端字节序存储,那么由之前的分析可以得出,地址由低到高第一个字节存储的应该是01,大端则为00.

由此,我们可以写出如下代码:


#include<stdio.h>
int main()
{
  int a = 1;
  char* p = (char*)&a; //强制类型转换,&a本为int*类型,转为char*型
  if (*p == 1)         //这样就能解引用访问第一个字节
  printf("小端");
  else
  printf("大端");
  return 0;
}


我们还可以简化一下,如下:


#include<stdio.h>
int main()
{
  int a = 1;
  if (*(char*)&a == 1)     //转换完直接解引用
  printf("小端");
  else
  printf("大端");
  return 0;
}


以上便是本期内容了,希望对您有所帮助,如有错误还请大佬指正。


相关文章
|
传感器 数据采集 物联网
Zigbee 控制节点数据收发流程|学习笔记
快速学习Zigbee 控制节点数据收发流程
651 0
Zigbee 控制节点数据收发流程|学习笔记
|
4月前
|
搜索推荐 API 对象存储
10分钟学会构建端到端的图片搜索服务
本文介绍在没有向量数据的情况下,怎样通过OpenSearch-向量检索版快速从零搭建图像搜索服务。
82697 69
|
2月前
|
消息中间件 监控 中间件
端到端的EOS支持
端到端的EOS支持
|
5月前
|
消息中间件 监控 中间件
中间件数据传输与采集
中间件在数据传输与采集中扮演关键角色,确保数据可靠性、转换格式、过滤信息、支持异步传输及保障安全性。它提供数据源灵活性,实现实时监控,并在应对不同业务需求时展现可扩展性。选择中间件时,需考虑性能、稳定性和可扩展性,以适应长期业务发展。
82 8
|
5月前
|
SQL 存储 监控
构建端到端的开源现代数据平台
构建端到端的开源现代数据平台
335 4
|
10月前
|
存储 传感器 监控
探密工业互联网网络体系:构建端到端的稳定传输
什么是工业互联网网络? 工业互联网网络是一种将工业设备、传感器和计算机系统连接到一起,以便它们可以共同工作、共享数据和实现更高效的生产和控制。这个网络体系的目标是提高工业过程的效率、可靠性和安全性。
|
11月前
|
Web App开发 视频直播
浏览器跨标签页通信、双向数据传输、实时通信有什么区别?
浏览器跨标签页通信、双向数据传输、实时通信有什么区别?
60 0
EMQ
|
传感器 算法 网络协议
MQTT 客户端自动重连最佳实践|构建可靠 IoT 设备连接
本文介绍在MQTT客户端代码实现过程中,自动重连逻辑设计的重要性与示例,帮助读者设计更为合理的重连代码,构建更加稳定可靠的物联网设备连接。
EMQ
1114 0
MQTT 客户端自动重连最佳实践|构建可靠 IoT 设备连接
|
Web App开发 存储 编解码
WebRTC 的连接过程
经过前面几部分的铺垫,你应该对P2P音视频互动的过程有了一个大概的了解,有可能你会觉得过程比较繁琐,甚至涉及到了网络底层。但是,不要担心,WebRTC已经帮我们做了很多的事情,让我们在音视频开发时变得轻而易举。那么WebRTC到底是什么呢?
257 0
|
安全 Linux 网络安全
strongSwan报文交互过程
strongSwan报文交互过程
strongSwan报文交互过程