union 一个被忽略掉的强力武器

z4zr 2013-09-29 PM 2840℃ 1条

在实验室试着将数据从单片机写到sd卡中的时候,由于<span style="text-decoration: underline">只能按照字节的方式进行写入和读取</span>,所以而在使用位运算进行操作的话 麻烦又浪费时间。。。

于是在百大爷上转转。。。。

原本写的程序中有需要将一个 unsigned long型数据写入sd卡中

最初选择创建一个byte[4]的数组,然后按照顺序将unsigned long 写到数组中 然后再将数组写入到sd卡中。。。。

不给发现了使用union来进行操作方便多了,避免了大量的位操作。

首先解释一下union 这个C语言学习中一个基础又一直被忽视的强劲成员。。。

union Ltime_buff{
    unsigned long time;
    byte byt[4];
}Lbuff;

union的成员们共同使用一块空间,它的大小为union中最大的一个成员的大小,,,

调用 和赋值的方法。。。:

union Ltime_buff{
    unsigned long time;
    byte byt[4];
}Lbuff;
unsigned long num;
Lbuff.time = num;
//然后取得对应字节的二进制只需要访问Lbuff.byt[]即可。。。
//因为它们共同使用一块空间。。。
//对应取得的就是 Lbuff.byt[0] Lbuff.byt[1] Lbuff.byt[2] Lbuff.byt[3]

//顺便祭出二进制输出 方便观察
void printbin(int num){
if (num==0)return;
printbin(num/2);
printf("%d",num%2);
}
标签: C/C++, union

非特殊说明,本博所有文章均为博主原创。

评论啦~



唉呀 ~ 仅有一条评论


  1. 贱血疯猴
    贱血疯猴

    非常NB啊。。!!!

    回复 2013-12-06 21:28
  2. 贱血疯猴
    贱血疯猴

    回复 2013-12-06 21:28