获取数组中每个int的LSB并将它们组合以创建一个字节

时间:2015-11-18 04:36:32

标签: c bitwise-operators

所以现在我有了这个

unsigned char getlsbs(unsigned char *p){
    int r;
    unsigned char newByte, temp;
    newByte = 0;

    for(r = 0; r < 8; r++){
            temp = p[r];
            temp &= -temp; // Gets the LSB of p[r]
            ((newByte & (1 << r)) >> r) |= temp; //This line does not work
    }
    return newByte;
}

对于没有工作的线路我试图将newByte的rth int设置为LSD,这样我就可以将00000000变成像10100001这样的任何帮助都会有很大帮助

2 个答案:

答案 0 :(得分:1)

您无法分配到表达式。为简化问题:a + 1 = b无效。改为将其改为a = b - 1

我会这样做:

for(r = 0; r < 8; r++){
    newByte |= (p[r] & 1) >> r;
}

答案 1 :(得分:0)

将比特累加到目标中的一种常用方法是向左移位前一个值,然后在新位中移位:newByte = (newByte << 1) | (temp & 0x01)在上面的代码中,该行的左侧是,&#34;此行不起作用&#34;似乎不是分配操作的有效目标。