我怎样才能从一个位数组到一个字节? [复制]
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 < 8; i++) result = (result << 1) | bits[i];
也可以,恕我直言。更容易理解。 (我和 Keveloper 提出的答案都没有检查 bits[] 的值是 0 还是 1)。最好用bits[i] == 0 ? 0 : 1
而不是bits[i]
。以上是关于我怎样才能从一个位数组到一个字节? [复制]的主要内容,如果未能解决你的问题,请参考以下文章