我怎样才能从一个位数组到一个字节? [复制]

Posted

技术标签:

【中文标题】我怎样才能从一个位数组到一个字节? [复制]【英文标题】:How can I go from a bit array to an byte? [duplicate] 【发布时间】:2018-06-25 14:31:07 【问题描述】:

我有这个位数组

int bits[8] =  0, 1, 1, 0, 0, 1, 0, 1 

这是十六进制的 65 或十进制的 101。 ASCII 字母是“e”。如何将我的数组读入 char 和 int(十进制值)?

【问题讨论】:

我会看看这个:***.com/questions/13667746/… 已接受答案的后半部分是错误的,遗憾的是...... 更喜欢第二个投票赞成的答案。 【参考方案1】:

您可以使用位移来从位数组中获取字符,如下所示:

int bits[8] =  0, 1, 1, 0, 0, 1, 0, 1 ;
char result = 0; // store the result

for(int i = 0; i < 8; i++)
    result += (bits[i] << (7 - i)); // Add the bit shifted value


cout << result;

这基本上会遍历您的数组,按正确的数量进行位移,然后将值添加到聚合“结果”变量中。输出应该是“e”。

【讨论】:

我可能会抛出一个 assert(bits[i] ==0 || bits[i] == 1) 只是因为如果它失败了,结果会默默地返回一个结果。 我会使用std::bitset,因为 C != C++(除非 C 是一个足够大的浮点值)。 for(int i = 0; i &lt; 8; i++) result = (result &lt;&lt; 1) | bits[i]; 也可以,恕我直言。更容易理解。 (我和 Keveloper 提出的答案都没有检查 bits[] 的值是 0 还是 1)。最好用bits[i] == 0 ? 0 : 1 而不是bits[i]

以上是关于我怎样才能从一个位数组到一个字节? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

休眠位数组到实体映射

如何将一个流读入另一个流? [复制]

从一个内存复制到另一个跳过C中的常量字节

我怎样才能第一次拉远程目录? [复制]

excel表格中的数字有一位数、两位数、三位数,可是排序只按第一位数排,怎样才能按1到10000的自然顺序排呢

我只有一个里面有 3 个数据框。我怎样才能连接它们? [复制]