char* 上的按位运算

gro*_*ove 1 c bit-shift pass-by-reference bitwise-operators bitwise-or

GCC 在编译下面的代码时出错。注释的两行而不是其他移位线有效,但我不确定铸造是否必要且真实。

错误是这样的:二进制操作数无效| (有“char*”和“int”)

谢谢。

void bits2byte(int *bits, char *byte) {
    byte = 0;
    int i;
    for (i = 0; i<8; i++) {
        if (bits[i] == 1) {
            byte = byte | 0x01;
            // byte = (char*)((int)byte | 0x01);
        }
        if (i<7) {
            byte = byte << 0x01;
            // byte = (char*)((int)byte << 0x01);
        }
    }
}
int main() {
    int input_bits[] = {1, 1, 0, 1, 0, 0, 1, 1};
    char output_byte;
    bits2byte(input_bits, &output_byte);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道这是一个引用传递问题。我正在尝试修改字节。我想要该函数将位转换为字节。实际上,我首先按照所有回答者/评论者建议的方式编写它,但是通过引用示例在http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom .ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr233.htm让我很困惑。

unw*_*ind 5

为什么要对指针进行按位运算?这不是一个好主意,这就是您收到编译器错误的原因。

您需要取消引用指针来*获取可以执行以下操作的值:

*byte |= 1;
Run Code Online (Sandbox Code Playgroud)

或者

*byte <<= 1;
Run Code Online (Sandbox Code Playgroud)

请注意使用|=and<<=运算符可以使代码更简单,这在使用指针时更加有用,因为“目标”表达式比直接变量长。