ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

利用联合体(共用体)判断机器存储方式(大端存储或小端存储)

2020-02-06 20:06:45  阅读:261  来源: 互联网

标签:小端 存储 字节 int 或小端 联合体 00 0x4000


利用C++程序判断机器存储方式(大端存储或小端存储)

1.大端存储和小端存储

概念 
大端存储与小端存储模式主要指的是数据在计算机中存储的两种字节优先顺序。
小端存储指从内存的低地址开始,先存储数据的低序字节再存高序字节;
相反,大端存储指从内存的低地址开始,先存储数据的高序字节再存储数据的低序字节。

各自优点: 
小端存储:便于数据之间的类型转换,例如:long类型转换为int类型时,高地址部分的数据可以直接截掉。 
大端存储:便于数据类型的符号判断,因为最低地址位数据即为符号位,可以直接判断数据的正负号。

用途: 
小端存储:常见于本地主机上(也有部分类型主机为大端存储)。 
大端存储:常见于网络通信上,网际协议TCP/IP在传输整型数据时一般使用大端存储模式表示,例如TCP/IP中
表示端口和IP时,均采用的是大端存储。
————————————————
版权声明:本文为CSDN博主「自由不死」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处
链接及本声明。
原文链接:https://blog.csdn.net/yyc1023/article/details/80270598

以32位存储十六进制数据0x00000001为例
大端存储即为

内存地址 0x4000 0x4001 0x4002 0x4003
存储字节 00 00 00 01

小端存储即为

内存地址 0x4000 0x4001 0x4002 0x4003
存储字节 01 00 00 00

PS1:字节内存储时数据不变,即0x4000中存储的01不能为10
PS2:字地址指最高位字节的字节地址(大端存储字地址为0x4000,小端存储字地址为0x4003)

2.联合体
联合体中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。

特别说明,这里所谓的共享不是指把多个成员同时装入一个联合变量内,而是指该联合变量可被赋予任一成员值,
但每次只能赋一种值,赋入新值则冲去旧值。如下面介绍的“单位”变量,如定义为一个可装入“班级”或“教研室”
的联合后,就允许赋予整型值(班级)或字符型(教研室)。要么赋予整型值,要么赋予字符型,不能把两者同时
赋予它。
union perdata
{
int Class;
char Office;
};
————————————————
版权声明:本文为CSDN博主「面包呢」的原创文章,遵循 CC 4.0 BY-SA 版权协议,
转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45380951/article/details/102550599

3.利用联合体判断大端小端

#include "stdafx.h"
#include<iostream>
using namespace std;

union test{
	int aa;
	char ch;
};
int main(){
	test _test;
	_test.aa=0x00000001;
	cout<<"本机储存顺序为:";
	if (_test.ch==1)
		cout<<"小端存储。";
	else
		cout<<"大端存储。";
	return 0;}

即ch=0时,大端存储

内存地址 0x4000 0x4001 0x4002 0x4003
存储字节(int) 00 00 00 01
char ch

ch=1时,小端存储

内存地址 0x4000 0x4001 0x4002 0x4003
存储字节(int) 01 00 00 00
char ch

2020.2.6

????Aries 发布了4 篇原创文章 · 获赞 0 · 访问量 120 私信 关注

标签:小端,存储,字节,int,或小端,联合体,00,0x4000
来源: https://blog.csdn.net/WOD_MAAYA/article/details/104190290

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有