首页 > 其他分享 >如何判断大端小端模式

如何判断大端小端模式

时间:2023-03-04 11:31:50浏览次数:28  
标签:小端 00 字节 模式 地址 大端

这是一篇介绍计算机大端模式和小端模式的博客,主要介绍了大小端方式的区别,各自的优缺点,以及如何利用代码进行简单判断。

一、来源与定义

1、来源

大端小端名词取自于《格列夫游记》中一个小故事,对鸡蛋从哪端开始吃产生分歧从而引发了战争的故事;后用于指代字节顺序。

2、定义

a、大端模式:最高位字节存放在内存的低地址端,最低位存放在内存的高地址端;

以十进制简单说明数据的最高位与最低位: image.png 最右端的个位即是最低位,而最左端是最高位;   那举例来说,大端模式中,对于0x11223344,存放顺序为: image.png

b、小端模式:最高位字节存放在内存的高地址端,最低位存放在内存的低地址端;

同样的例子:0x11223344,小端模式中,存放顺序为: image.png

c、各自的特点:

  • 小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样;
  • 大端模式 :符号位的判定固定为第一个字节,容易判断正负。

二、划分大端小端模式的原因

在计算机系统中,我们以字节为单位,一个字节为8bit。当一个数据有多个字节时,就存在着如何安排多个字节顺序的问题,这也就是大端小端模式产生的原因。

三、如何区分大端小端

1、查看内存中存储数据的顺序

通过vs编译器的调试窗口,我们可以清晰的看到内存中对应的地址以及存储的数据; 如下,我们定义一个整型数据,

int main()
{
	int a = 0x11223344;
	return 0;
}

由此我们可以看到,在内存中,地址由低到高的同时,数据位也由低位到高位,故这是小端模式;反之,若地址由低到高,而数据位却由高到低,则是大端模式。 image.png

2、定义整型数据,利用强制类型转换,只访问第一个字节

采用如下代码:

#include<stdio.h>
int main()
{
	int a = 1;
	char* pa = (char*)&a;
	printf("%d", *pa);
	return 0;
}

定义整型变量a = 1,pa指向a的地址,由于强制类型转换为char*,所以pa的步长为1个字节,在printf时,只会输出整型a变量4个字节中,第一个字节的数据。   a的原码为 00000000 00000000 00000000 00000001           转换为16进制为 00 00 00 01 若为大端模式,则存储顺序地址由低到高应依次为 00 00 00 01,故应输出0; 若为小端模式,则存储顺序地址由低到高应依次为 01 00 00 00,故应输出1; 结果不同,从而得以判断。   依据测试,同样可以得出,本计算机为小端模式。 image.png

标签:小端,00,字节,模式,地址,大端
From: https://blog.51cto.com/u_15423682/6099891

相关文章

  • CSS@media暗黑模式配置
    css媒体切换需要基于模板修改成需要的样式@media(prefers-color-scheme:light){.article{background:#fff;color:#000;}}@media(pr......
  • 大厂员工的做事模式
    “这人做事靠谱”、“这人做事很厉害”。都是同一部门的,级别一样,岗位职责一样,都在一个项目,为何某些人做事就比大部分更靠谱、更厉害?因为他们态度更积极,更会表现?带过团队就知......
  • 运放浮动的VI源简图(增强运算放大器的输出电压模式)
    参考《运算放大器电路设计手册》,如下图所示,增强运算放大器的输出电压范围。 前面的博客也讲了一些功率放大电路的设计,现在将功率放大电路加上V/I源的控制环路,如图: ......
  • 工厂模式的一些想法
    程序员的通病,写代码是为自己写的。这句话是废话。但是就像StackOverflow那个问题:为什么要Listl=newArrayList<>();很火一样。核心是:你不要为自己写代码。你的代......
  • 单例模式
    classSingleton{privateSingleton(){}privatestaticvolatileSingletonsingleton=null;publicstaticSingletongetInstance(){if......
  • 成品直播源码,Flutter 夜间模式 全局字体
    成品直播源码,Flutter夜间模式全局字体 import'package:flutter/material.dart';import'package:flutter_widget/router/applicationRouterGradual.dart';import'pa......
  • 访问者模式
    访问者模式是一种将算法与对象结构分离的软件设计模式。它可以让你在不修改对象结构的情况下,对对象结构中的元素进行不同的操作。访问者模式的优点是符合单一职责原则,优秀......
  • Book-深入设计模式
    Book-深入设计模式https://refactoringguru.cn/design-patternshttps://github.com/RefactoringGuruhttps://github.com/RefactoringGuru/design-patterns-cpp设计模......
  • 22-享元模式
    22-享元模式概念享元模式(flyweight),运用共享技术有效地支撑大量细粒度的对象享元模式可以避免大量非常相似的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示......
  • 关于解决UEditor源码模式下提交保存样式 样式是乱的
             问题1这个项目的UEditor是用来编辑页面的 每个页面又有不同的模块 然而业务部门有时候是会直接从别的模块直接复制源代码然后在可视模式......