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

c – 按位 *** 作是否会帮助我序列化一些bool?,第1张

概述我不习惯二进制文件,而我正试图抓住它.我设法存储了一些整数和unsigned char,并且没有太多的痛苦就读了它们.现在,当我试图保存一些布尔值时,我看到我的每个bool在我的文件中只占用了1个八位字节,这似乎是合乎逻辑的,因为一个单独的bool存储在一个字符大小的数据中(如果我错了,请纠正我) !). 但是因为我将要有3或4个bool来序列化,我认为将它们存储起来是浪费:00000001 00 我不习惯二进制文件,而我正试图抓住它.我设法存储了一些整数和unsigned char,并且没有太多的痛苦就读了它们.现在,当我试图保存一些布尔值时,我看到我的每个bool在我的文件中只占用了1个八位字节,这似乎是合乎逻辑的,因为一个单独的bool存储在一个字符大小的数据中(如果我错了,请纠正我) !).

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

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

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

解决方法 以一个字节存储bool:

bool flag; // value to storeunsigned char b = 0; // all falseint position; // ranges from 0..7b = b | (flag << position);

读回来:

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

以上是内存溢出为你收集整理的c – 按位 *** 作是否会帮助我序列化一些bool?全部内容,希望文章能够帮你解决c – 按位 *** 作是否会帮助我序列化一些bool?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1213466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存