联合(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),则高位在低地址;

不知道对不对?

求大神指点或者顺便也可以给一些你们平时写代码的时候用到的实例!

转载于:https://www.cnblogs.com/gold-lion/p/3275573.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值