怎么把一个bool数组转成char?
嵌入式Linux
共 942字,需浏览 2分钟
·
2020-07-23 12:20
这个是在知乎上看到的问题,分享给大家,如果有不同的答案,欢迎评论回复。
知乎惯例
谢邀
人在厕所,刚刚蹲下
因为最近都流行长文,但是作为日更而且更喜欢表达自己看法的我,力争文章是自己想发的,而且是有点作用的。
#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来做判断,按照我上面的写法,占用的内存直接降低几个等级。
微信扫描二维码,关注我的公众号
评论