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

嵌入式Linux

共 942字,需浏览 2分钟

 ·

2020-07-23 12:20

6d72564c37c805acb1a6de0fddb2b6af.webp


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

知乎惯例

谢邀

人在厕所,刚刚蹲下

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

#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);

输出

3b7830273be1595c1f10a5875b5cfdd3.webp输出

你可能认为的答案

#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);

输出

92e759d9dd589ae5ef52ef00d459e8f0.webp输出

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

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

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



推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语言





嵌入式Linux
微信扫描二维码,关注我的公众号
浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报