当前位置: 首页 > news >正文

【C语言】大小端字节序问题

一、大小端字节序问题

大小端是由CPU决定的,大小端可以理解为字节顺序,所以大小端全称叫大端字节序、小端字节序。其实大端、小端这两个词是从《格列佛游记》里出来的。《格列佛游记》有一段讲的是吃鸡蛋是从大的那头敲开还是小的那头敲开的问题,书中把从大头敲开的那种叫做大端,把从小头敲开的那种叫小端,第一个指出计算机数据存储顺序问题的人就采用了这个大小端的说法。

  • 这里输入一组数据,观察他们在内存中是什么样的
int a = 1;

这是a的内存地址0x00C5FBDC(为了方便观察里面数据采用16进制),可以看到a在内存中是01 00 00 00

在这里插入图片描述

1.小端字节序

  • 肯定有人有疑惑为什么数据在内存中是倒着存?,这就是小端存储方式🌈

在这里插入图片描述
大小端是以字节来看(两个十六进制数),将低位字节存在低位地址,就是小端存储,如果一个十六进制数0x11223344,那么11相对22来说就是高字节,就好像十进制的高位一样,十进制的123,那么1相对2来说就是高位


2.大端字节序

在这里插入图片描述

大端字节序是将高位放在低地址,将低位放在高地址

3.如果通过代码来判断自己的计算机是大端还是小端?

#include <stdio.h>int check()
{int i=1;return (*(char*)&i);
}int main()
{int ret = check();if(ret==1){printf("小端\n");}else{printf("大端\n");}return 0;
}

不论里面的字节序是大端还是小端,变量的地址都是最低位的地址,所以讲int型的 i 取地址强转成char*,得到的是最低位地址的一个字节(8bit),由于我们将 i 赋值成为了1,所以如果是小端字节序的话,(char)& i 会等于1,如果是大端字节序的话*(char*)&i等于0。


完结

创作不易,还请各位小伙伴多多点赞👍关注✨收藏⭐

请添加图片描述

http://www.lryc.cn/news/11591.html

相关文章:

  • Linux | 网络通信 | 序列化和反序列化的讲解与实现
  • C#的委托原理刨析and事件原理刨析和两者的比较
  • Redis学习【8】之Redis RDB持久化
  • SpringSecurity认证
  • Socket套接字
  • mysql详解之innoDB
  • 电信运营商的新尝试:探索非通信领域的发展
  • 第07章_单行函数
  • Echarts实现多柱状图重叠重叠效果
  • PHP学习笔记(一谦四益)
  • Jvm -堆对象的划分
  • 2023美赛F题讲解+数据领取
  • 【博客625】keepalived开启garp refresh的重要性
  • nginx防护规则,拦截非法字符,防止SQL注入、防XSS,nginx过滤url访问,屏蔽垃圾蜘蛛,WordPress安全代码篇
  • 【计算机网络】网络层
  • 产品经理知识体系:1.什么是互联网思维?
  • 【数据结构】单链表的接口实现(附图解和源码)
  • TikTok话题量超30亿,这款承载美好记忆的剪贴簿引发讨论
  • 了解Dubbo
  • 2023年前端面试知识点总结(JavaScript篇)
  • jQuery
  • 强化学习基础概念
  • Redis学习【9】之Redis RDB持久化
  • 分析 vant4 源码,学会用 vue3 + ts 开发毫秒级渲染的倒计时组件,真是妙啊
  • 事件驱动型架构
  • 20222023华为OD机试 - 不含 101 的数(Python)
  • 杭州电子科技大学2023年MBA招生考试成绩查询和复查申请的通知
  • 电子技术——CS和CE放大器的高频响应
  • 2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals):SDGs 优先事项的选择
  • springboot实现项目启动前的一些操作