【发布时间】:2017-02-25 03:28:01
【问题描述】:
所以我有一个字符数组,如下所示 {h,e,l,l,o,o} 所以我需要先把它翻译成它的位表示,所以我会得到这个
h = 01101000
e = 01100101
l = 01101100
l = 01101100
o = 01101111
o = 01101111
我需要将所有这些位分成五个一组并将其保存到一个数组中 所以例如所有这些字符的联合将是
011010000110010101101100011011000110111101101111
现在我把它分成五个一组,所以
01101 00001 10010 10110 11000 11011 00011 01111 01101 111
最后一个序列应该用零完成,所以它应该是 00111。注意:每组 5 位将用一个标题完成,以便有 8 位。
所以我还没有意识到如何做到这一点,因为我可以提取每个字符的 5 位并得到每个字符的二进制表示,如下所示
for (int i = 7; i >= 0; --i)
{
printf("%c", (c & (1 << i)) ? '1' : '0');
}
问题是如何组合两个字符,所以如果我有两个字符 00000001 和 11111110 当我分成五组时,我将有字符的第一部分的 5 位,而对于第二组,我将有 3 位最后一个字符和第二个字符的 2。如何进行这种组合并将所有这些组保存在一个数组中?
【问题讨论】:
-
你想要实现的东西没有意义。
-
这个和base64差不多。 Base64 每个字符存储 6 位。与您想要的非常相似,除了 base64 从每 3 个字节中收集额外的 2 位,并使用前 3 个字节中的 6 个额外位来制作每个第 4 个字节。
-
@doug65536 对于每组 5 位,我会添加一个标题来完成 8 位,问题是我无法弄清楚如何获得所有这五个组
-
你不能只是通过连接
'h' = "01101000" ....的结果来构建一个字符串,然后将字符分成五个一组,直到剩下的字符少于 5 个,然后填充最后一个组。 -
一个循环,一些用于跟踪位偏移的变量,一些移位和屏蔽,以及一个输出缓冲区。
标签: c binary character ascii bits