c - char* 的位运算

标签 c pass-by-reference bitwise-operators bit-shift bitwise-or

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

错误是这样的:二进制操作数无效 | (有 '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);
}

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

最佳答案

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

您需要使用 * 取消引用指针获得一个您可以对其执行这些操作的值:

*byte |= 1;

*byte <<= 1;

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

关于c - char* 的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14483332/

相关文章:

c - 使用一根管道在父子之间进行读写

c - 'constant database' 的快速索引格式

parameter-passing - "pass by reference"是糟糕的设计吗?

PHP 通过引用传递数组元素

c - 在公投中使用 C 位运算符 - 作业

c - 不同操作系统中可能出现的换行符有哪些

c++ - 循环链表算法

c++ - 如何在 main 中调用包含对节点的引用的函数

c# - |=(单管道等于)和&=(单&符号等于)是什么意思

binary - 二元 NOT (~) 运算符如何工作?