首页 > 解决方案 > 指针指向的两个内存位置的 OR 操作

问题描述

我想对指针指向的两个内存位置执行按位或运算并将其存储为 char 数组。

我对在两个内存位置执行 OR 操作并稍后将它们分配给 char 数组感到震惊。

void perform_or_operations ( struct storage *a, struct storage *b )
{
     char array[0x1000]; // size of array is bigger than struct storage

     // Perform OR operation
     array = a | b ???

}   

有什么建议么 ?

标签: c

解决方案


您似乎想对这两个结构的表示进行操作。你真的应该使用unsigned char而不是char那个,但无论哪种方式都是可能的。指向任何对象类型的指针都可以转换为指向字符类型的指针,并且生成的指针可用于访问指向对象的表示。但是,您绝对需要取消对此类指针的引用——您的代码会尝试对指针本身进行操作。

此外,C 中没有整个数组赋值。如果我正确理解你想要做什么,那么你需要单独执行按位或在表示的每个字节上执行。

最后,您可能会发现将数组归零对您有利,这样那些与 a 的表示不对应的字节struct storage具有一致的值。

例子:

void perform_or_operations ( struct storage *a, struct storage *b ) {
    unsigned char array[0x1000] = { 0 };
    unsigned char *a_bytes = (unsigned char *) a;
    unsigned char *b_bytes = (unsigned char *) b;

    for (size_t i = 0; i < sizeof(*a); i++) {
        array[i] = a_bytes[i] | b_bytes[i];
    }
}   

如果您确实需要使用该类型,请替换 (everywhere char) 。unsigned char


推荐阅读