说我有这8位字符:
01111111 00011100 01101111
我想省略前导0并附加char之前的位,如下所示:
11111110 01110011 01111000
*请注意,最后一个字符用零填充。
非常感谢任何有关如何做到这一点的建议。欢呼声。
答案 0 :(得分:3)
将第一个字符向上移1:
num[0] << 1;
这会将01111111
变为11111110
。现在你需要将LSB与下一个字符的MSB进行OR运算。要做到这一点,你需要转移下一个字符的副本:
char copy = num[1] >> 7;
这会将01110011
转换为00000000
,因为它的高位为0.您现在可以将两者转为:
num[0] |= num[1];
哪个会给你你想要的东西。
要使用序列执行此操作,您需要循环并将每次迭代的移位增加到8,然后重置。
请注意,正如chux指出的那样,最好使用 unsigned 类型来处理这类内容。