加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 按位操作是否会帮助我序列化一些bool?

发布时间:2020-12-16 09:32:16 所属栏目:百科 来源:网络整理
导读:我不习惯二进制文件,而我正试图抓住它.我设法存储了一些整数和unsigned char,并且没有太多的痛苦就读了它们.现在,当我试图保存一些布尔值时,我看到我的每个bool在我的文件中只占用了1个八位字节,这似乎是合乎逻辑的,因为一个单独的bool存储在一个字符大小的
我不习惯二进制文件,而我正试图抓住它.我设法存储了一些整数和unsigned char,并且没有太多的痛苦就读了它们.现在,当我试图保存一些布尔值时,我看到我的每个bool在我的文件中只占用了1个八位字节,这似乎是合乎逻辑的,因为一个单独的bool存储在一个字符大小的数据中(如果我错了,请纠正我) !).

但是因为我将要有3或4个bool来序列化,我认为将它们存储起来是浪费:00000001 00000001 00000000,例如,当我可以拥有00000110时.我想要获得这个我应该使用按位运算,但我对他们不太好……所以有人可以告诉我:

>如何使用按位操作在一个八位字节中存储多达8个bool?
>如何使用按位操作从单个八位字节中为(最多8个bool)提供适当的值?
>(而且,奖金问题,是否有人可以推荐一个简单的,非数学导向的思维,如我的,位操作教程,如果存在?我发现的一切我理解但无法付诸实践……)

我正在使用C,但我猜大多数C语法语言将使用相同类型的操作.

解决方法

以一个字节存储bool:

bool flag; // value to store
unsigned char b = 0; // all false
int position; // ranges from 0..7
b = b | (flag << position);

读回来:

flag = (b & (1 << position));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读