您当前的位置: 首页 >  ar

怎么把一个bool数组转成char?

发布时间:2020-07-23 12:06:49 ,浏览量:0

这个是在知乎上看到的问题,分享给大家,如果有不同的答案,欢迎评论回复。

知乎惯例

谢邀

人在厕所,刚刚蹲下

因为最近都流行长文,但是作为日更而且更喜欢表达自己看法的我,力争文章是自己想发的,而且是有点作用的。

#include "stdio.h"
#include "stdbool.h"

struct boolStr{
 char bit0:1;
 char bit1:1;
 char bit2:1;
 char bit3:1;
 char bit4:1;
 char bit5:1;
 char bit6:1;
 char bit7:1;
};
int main(void)
{
 struct boolStr bitStr;
 char temp = 0;
 bitStr.bit0 = 1;
 bitStr.bit4 = 1;
 temp = *(char *)&bitStr;
 printf("size:%d %d\n",sizeof(bitStr),sizeof(temp));
 printf("temp:0x%x\n",temp);
 return (0);
} 

输出

输出 你可能认为的答案
#include "stdio.h"
#include "stdbool.h"

int main(void)
{
 bool barray[8];
 char temp = 0;

 printf("size:%d %d\n",sizeof(barray),sizeof(temp));
 printf("temp:0x%x\n",temp);
 return (0);
} 

输出

输出

得出来的sizeof(8*bool) = 8 而不是 1 我们默认的最小存储单元是 8bit,一个char字节。所以你要控制每一个bit是需要点技巧的。

这样的用法在单片机里面非常多,不知道你们写程序的时候有没有用到标志位,我们写标志位的时候,是用bool变量,但是实际上bool变量在占用的是一个字节的。

有了这样的问题,我们就需要想出一个解决办法,用一个bit来做判断,按照我上面的写法,占用的内存直接降低几个等级。

推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

嵌入式Linux

微信扫描二维码,关注我的公众号

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    106585博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.3528s