联合(union)类型有哪些使用场景
2013-08-22 - 18:17:50 by Gold_Lion
今天突然碰到“联合”这个数据类型了,平时用的不多,实在也想不出来它到底能帮我干嘛?于是google了一下,终于有一个是利用联合(Union)来判断CPU是大端(Big Endian)还是小端(Little Endian):
这是网上一个兄弟的代码:
举个例子,利用union判断Big Endian\Little Endian方法:
static union
{
char c[4];
unsigned long mylong;
}
endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
ENDIANNESS 为 'l' 则为little endian, 为 'b'则表示big endian
然后我左思右想感觉不怎么对啊?
'l', '?', '?', 'b' 这四个字符应该就是按照从地址低~地址高放在内存里面,不管是大端还是小端机器?(手上也没有大端机器,也不能测试,总感觉不踏实,求大神出来帮忙确认。。。。)
我自己想了一个方法,不知道对不对?下面是我的代码:
static union
{
char c[4];
unsigned long mylong;
}
endian_test = {{ 'l', 'a', '?', 'b' } }; //把第一个‘?’改成‘a‘这样的话 这样通过内存来看其ascii码更好一点:
'l', 'a', '?', 'b'在内存中分布如下:
endian_test.c,mb 0x002ff744 6c 3f 61 62 cc cc cc cc 9c f7 2f 00 78 19 86 00 l?ab���̜�/.x.. char [4]
printf("%d",endian_test.mylong);
//这个时候通过判断mylong字段的值:如果mylong == 0x62 61 3f 6c(1,650,540,396),则是地位在低地址,为小端机器;如果mylong == 0x6c 3f 61 62(1,816,093,026),则高位在低地址;
不知道对不对?
求大神指点或者顺便也可以给一些你们平时写代码的时候用到的实例!
联合(union)类型有哪些使用场景的更多相关文章
- 结构体struct 与 联合union
1.C语言中的结构体 1.1 定义 结构体是由一系列相同或不同类型的变量组成的集合. struct 结构体名{ //struct为关键字,“结构体名”为用户定义的类型标识. ...
- C#联合Union的实现方式
一.基础篇 C#不像C++,他本身是没有联合Union的,但是可以通过手动控制结构体每个元素的位置来实现,这需要结合使用StructLayoutAttribute.LayoutKind以及FieldO ...
- enum,struct,union类型使用和长度
VC,C++ Builder和lcc三个编译器 间枚举类型enum长度的情况. 各种C编译器默认的字节对齐数不一致,要写通用的代码,经常就是使用 #pragma pack(1) ... #pragma ...
- 【转】结构struct 联合Union和枚举Enum的细节讨论
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...
- c++ 变量共享内存-联合(union)
共享内存极少使用,所以这里我们仅作了解. .将几个变量放在相同的内存区,但其中只有一个变量在给定时刻有有效值. .程序处理许多不同类型的数据,但是一次只处理一种.要处理的类型在执行期间才能确定. .在 ...
- C语言中Union类型的使用方法
转自:http://blog.csdn.net/feimor/article/details/6858103 使用C语言时,常常使用struct,对于union类型却几乎没有用过,只知道它是联合类型, ...
- SQL SERVER 2012 第四章 连接 JOIN语句的早期语法结构 & 联合UNION
1/内部连接的早期语法结构 INNER JOIN SELECT * FROM Person.Person JOIN HumanResources.Employee ON Person.Person.I ...
- C语言学习015:联合(union)与枚举(enum)
联合 联合和结构的区别是,结构会为每个字段申请一片内存空间,而联合只是申请了一片内存空间然后所有字段都会保存到这片空间中,这片空间的大小由字段中最长的决定,下面我们就开始定义一个联合 //联合的定义 ...
- C 语言 联合union初见
1.什么是联合? “联合”是一种构造类型的数据结构.在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已 ...
随机推荐
- flex 添加svn插件
http://blog.csdn.net/gangan1345/article/details/7926848
- php实现递归的三种方式: 遍历文件夹实例
递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则无限无限调用下去.实现递归函数可以采取什么方式呢?本文列出了三种基本方式.理解其原来需要一定的基础知识 ...
- jquery.qrcode 生成二维码带logo
<div id="container">这里是二维码显示位置</div> <script language="JavaScript" ...
- SpringMVC 文件上传&拦截器&异常处理
文件上传 Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.Spring 用 Jakarta Commons FileUpload ...
- Haskell Types与Typeclasses
可使用 :t 命令检测表达式类型. 明确的类型首字母必大写. 一.Types Char Bool Int(有界,与Integer类型对比效率高) Integer(无界,与Int类型对比效率低) Flo ...
- 【译】Permissions Best Practices Android M权限最佳做法
Permissions Best Practices PreviousNext In this document Consider Using an Intent Don't Overwhelm th ...
- ssh 无密码登陆
ssh -i littlesuccess-aws.pem root@172.31.36.91 "cat >> ~/.ssh/authorized_keys" < ...
- powershell读写磁盘变量(对象序列化)
---[第一章,开篇引子]--- 很久很久以前,我在网上闲逛,看到一头powershell菜鸟,写了一篇感慨道“挖哈哈,我学会powershell啦,我以前很笨,各种不懂,还想把变量保存起来.” 实际 ...
- 支付宝集成后报错ALI38173
原因: 支付时传的参数不正确. 出现这个错误, 说明支付功能已经集成成功, 前后台核对下参数就能找到原因了.
- linux查看系统命令
[root@server ~] # uname –a # 查看内核/操作系统/CPU信息的linux系统信息命令 [root@server ~] # hea ...