返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中大小端问题实例探索解决方法
  • 422
分享到

C语言中大小端问题实例探索解决方法

C语言大小端C语言大小端问题 2023-02-14 12:02:00 422人浏览 独家记忆
摘要

目录一、什么是大小端二、举个例子三、大小端演示四、解释"二"中举例的问题五、怎么判断是大端还是小端六、一个题目一、什么是大小端 大端模式:就是高位字节数据存放在内

一、什么是大小端

大端模式:就是高位字节数据存放在内存的低地址端,低位字节数据存放在内存的高地址端。

小端模式:就是低位字节数据存放在内存的低地址端,高位字节数据存放在内存的高地址端。

【大端】和【小端】表示多字节值的哪一端存储在该值的起始地址处;

二、举个例子

#include<stdio.h>
int main()
{
	int a = 1;
	return 0;
}

调试运行一下,打开内存监视窗口,发现定义的这个int类型的变量a(int a = 1)为4个字节,转换成bit是32位,所以电脑中存储的变量a为二进制表示00000000 00000000 00000000 00000001,vs2019中的监视此时表示的16进制,也就是0x00 00 00 01。但是看看VS2019里面所显示的是不是就有点懵了,a这个变量值是1 ,在内存中存储应该是0x 00 00 00 01,为什么编译器给出的却是0x 01 00 00 00呢?提到这个问题就要说说大小端问题了???!!!!

三、大小端演示

按照不同模式将a保存在内存中,情况如下:

补充:结合高位字节,低位字节与大小端进行比较理解

当向内存中存放一个数据的时候,会从内存的高地址开始往低地址的方向放这个数据,但是放数据的时候就是按照我们人为的这种认识往里面存放吗?比如向内存中放一个数据0x11 22 33 44,计算机就是把这个数字送到内存后,这个时候内存中数据放的样式就是我们输入的这样吗?其实真正向内存存储的时候,由于内存选择了不同的两种(大端、小端)存储模式,内部真正存放的样式就跟我们想的不一样了。但是人们聪明啊,把自己认为的这种顺序规定了是从高位字节到低位字节的。即一个确定的数字,从左往右,就是从高位字节到低位字节,可以说这是一种一致认为的习惯说法。

这样区分大小端就是按照字节位与地址大小比较来确定。

四、解释"二"中举例的问题

那么刚刚VS2019中的问题就可以讲的通了,在VS2019中,数据往内存中存放是由高地址到低地址的,由于存储方式是小端存储模式,所以先往里放高位字节的内容,即对于0x12345678来说,从高地址往低地址存放时,放入顺序就如图a所示。然后由于操作系统在访问内存数据时是从低地址向高地址的顺序进行的,所以最后显示的存放就如图b所示

五、怎么判断是大端还是小端

int check_sys()
{
	int a = 1;
	return *(char*)&a;
}
int main()
{
	int ret = check_sys();
	if( ret == 1 )
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}

六、一个题目

在小端机器中,下面代码输出的结果是:( )

A.00223344
B.0
C.11223300
D.112233

#include <stdio.h>
int main()
{
	int a = 0x11223344;
    char *pc = (char*)&a;
    *pc = 0;
    printf("%x\n", a);
    return 0;
}

解析:

假设,a变量的地址为0x64,则a变量在内存中的模型为:

0x64| 44 |

0x65| 33 |

0x66| 22 |

0x67| 11 |

char*类型的指针变量pc指向只能指向字符类型的空间,如果是非char类型的空间,必须要将该空间的地址强转为char*类型。

char *pc = (char*)&a; pc实际指向的是整形变量a的空间,即pc的内容为0x64,即44,

*pc=0,即将44位置中内容改为0,修改完成之后,a中内容为:0x11223300

因此:选择C

到此这篇关于C语言中大小端问题实例探索解决方法的文章就介绍到这了,更多相关C语言大小端内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中大小端问题实例探索解决方法

本文链接: https://lsjlt.com/news/195997.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言中大小端问题实例探索解决方法
    目录一、什么是大小端二、举个例子三、大小端演示四、解释"二"中举例的问题五、怎么判断是大端还是小端六、一个题目一、什么是大小端 大端模式:就是高位字节数据存放在内...
    99+
    2023-02-14
    C语言大小端 C语言大小端问题
  • C语言编程大小端问题示例详解教程
    目录如何理解大小端大小端的基本概念大小端是如何影响数据的存取的今天想给大家分享的,是数据存储中的大小端问题,今天的分享主要分为三个部分,分别是如何理解大小端,大小端的基本概念以及大小...
    99+
    2024-04-02
  • c语言小球反弹问题怎么解决
    在C语言中,可以使用循环结构来模拟小球的反弹问题。以下是一个简单的解决方案:```c#include int main() {int...
    99+
    2023-08-18
    c语言
  • GO语言编程中的算法实践:探索新的解决方案
    随着人工智能和大数据时代的到来,算法在各个领域中都扮演着重要的角色。而在算法实现中,选择一门适合的编程语言也是至关重要的。GO语言作为一门高效、可靠的编程语言,它不仅能够满足高性能算法实现的需求,还具有良好的并发和分布式处理能力。本文将介...
    99+
    2023-08-23
    laravel 编程算法 自然语言处理
  • C语言三种方法解决轮转数组问题
    目录题目1.题目描述2.要求3.原题链接二、相关知识点三、解决思路旋转法直接法空间换取时间题目 1.题目描述 给你一个数组,将数组中的元素向右轮转 k 个位置,其中&nbs...
    99+
    2024-04-02
  • thinkphp6方法大小写问题怎么解决
    今天小编给大家分享一下thinkphp6方法大小写问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。方法是一组带有参...
    99+
    2023-07-06
  • C语言中的盗贼(小偷)问题详解
    问题描述:警察审问4名窃贼嫌疑犯。现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎。 这4个人给警察的回答如下。 甲说:“乙没有偷,...
    99+
    2024-04-02
  • C语言实例问题探究字符串函数的应用
    目录一、典型问题一二、典型问题二三、典型问题三四、典型问题四一、典型问题一 下面的程序输出什么?为什么 分析 snprintf 函数本身是可变参数函数,原型如下:int snpri...
    99+
    2024-04-02
  • 深入探讨Go语言中的方法重载问题
    go 语言不支持直接方法重载,而是使用接口来模拟类似功能。接口定义一组方法,类型通过实现接口的方法来模拟重载,使用不同接口定义不同参数列表的相同方法,创建类型实现这些接口,从而达到方法重...
    99+
    2024-04-03
    go语言 方法重载
  • C#中获取文件大小问题怎么解决
    本篇内容主要讲解“C#中获取文件大小问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中获取文件大小问题怎么解决”吧!C# 获取文件大小直接贴代码吧   ...
    99+
    2023-07-05
  • AndroidBottomNavigationView与Fragment重建与重叠问题解决方法探索
    目录简介解决方法第一步第二步第三步使用同级Fragment跳转Activity跳转到Fragment简介 在BottomNavigationView+多个Fragment框架下,进行...
    99+
    2023-01-17
    Android BottomNavigationView与Fragment重建 Android BottomNavigationView与Fragment重叠
  • C语言算法中如何解决佩奇借书问题
    小编给大家分享一下C语言算法中如何解决佩奇借书问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 问题描述佩奇有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?2. 题目分析本题...
    99+
    2023-06-29
  • 如何解决C语言中for循环问题
    本篇内容主要讲解“如何解决C语言中for循环问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决C语言中for循环问题”吧!今天分享一下C语言中的for循环中我们常常忽略的小问题。举一个小...
    99+
    2023-06-07
  • C语言中static的使用方法实例详解
    目录前言一、static修饰变量1.修饰局部变量2.修饰全局变量二、static修饰函数补充:static的好处是什么?总结前言 static关键字不仅可以用来修饰变量,还可以用来修...
    99+
    2022-11-13
    c语言static的用法 static作用 c语言 c语言static关键字的用法
  • 深入探讨C语言指针:高级应用和常见问题解决方案
    C语言指针深度剖析:指针的高级应用与常见问题解决方案 引言:C语言作为一门底层语言,指针是其核心特性之一。虽然指针的概念相对简单,但其高级应用和常见问题解决方案却是很多程序员所关注的重...
    99+
    2024-02-23
    c语言 指针 高级应用
  • C语言解决堆栈括号匹配问题示例详解
    目录首先构建栈调用匹配函数代码调用1.括号匹配问题就是当遇到{( [这些左括号的时 将括号字符入栈 2.当遇到右括号时判断栈顶元素是不是与左括号匹配如果匹配就出栈 如果不匹配就直接结...
    99+
    2024-04-02
  • 探索Go语言中类方法和对象方法的实际应用
    类方法和对象方法区别及应用:类方法:作用于类型本身,不需要对象实例调用,用于创建新实例或执行类型级操作。对象方法:必须通过对象实例调用,用于修改对象状态或访问私有字段,接收者必须是指针类...
    99+
    2024-04-03
    类方法 对象方法 go语言
  • C语言字符串处理的惊天大坑问题解决
    目录引言C 语言字符串保证 C 代码的安全性非拉丁语言的处理引言 毋庸置疑,在使用 C 字符串时必须小心,否则你就会因为各种的未定义行为而感到头疼。 最近,我一直在学习 C 语言,也...
    99+
    2023-05-20
    C语言字符串处理 C语言字符串处理问题
  • 小写转大写:C语言编程的有效解决方案
    小写转大写:C语言编程的有效解决方案,需要具体代码示例 在C语言编程中,经常会遇到需要将字符串中的小写字母转换为大写的问题。这在很多应用中都是必不可少的操作,比如在输入密码时要求将小写...
    99+
    2024-04-02
  • SpringBoot跨域问题的解决方法实例
    谈到跨域问题,首先我们要认识一下浏览器的同源策略 百度百科对同源策略的解释 当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面 当浏览器的百度tab页执行一个脚本的时候会检查...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作