如何实现几个字节同事偏移N位(按bit位偏移)?

2019-07-21 06:27发布

比如有一个三个元素的数组,转换成二进制 内容如下  00001111 00001111 00001111  ,让他们同时往左偏移3个bit位  变成 00000001 11100001 11100001  如何用C语言来实现呢?越简短越好谢谢各位网友


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
Yefeng是叶峰
2019-07-22 04:08
static void data_offset(uint8_t len, uint8_t data_len, uint8_t* data)
{
        uint8_t byte_nums = (data_len + 7) / 8;
        uint8_t index = byte_nums;

        data[index] = data[index - 1] << (8-len)|data[index] >> len;
        for (; index > 0; index--)
        {
                if (index == 1)
                {
                        data[index - 1] >>= len;
                }
                else
                {
                        data[index - 1] = data[index - 2] << (8-len) | data[index - 1] >> len;
                }
        }
}

这是我写的一个函数,能实现整体的右移, len:偏移量,data_len是数据长度,单位都是bit,data是需要移动的数据,这个数据的长度,必须比byte_nums大1,因为如果是1个字节偏移的情况,可能需要两个字节来装后面溢出的那一部分。
但是我还是觉得我写的太麻烦,不知道有没有网友可以提供一个更简单的方法

一周热门 更多>