c - 对指针指向的两个内存位置进行“或”运算

标签 c

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

我对两个内存位置执行 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 ???

}   

有什么建议吗?

最佳答案

看来您想要对两个结构的表示进行操作。为此,您确实应该使用 unsigned char 而不是 char,但无论哪种方式都有可能。指向任何对象类型的指针都可以转换为指向字符类型的指针,并且得到的指针可以用于访问所指向对象的表示。但是,您绝对需要取消引用此类指针 - 您的代码尝试对指针本身进行操作。

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

最后,您可能会发现将数组清零是有利的,以便那些不对应于结构存储表示的字节具有一致的值。

示例:

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];
    }
}   

如果您确实需要使用该类型,请将 char 替换为 unsigned char(任何地方)。

关于c - 对指针指向的两个内存位置进行“或”运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57361196/

相关文章:

c - "object"和指向某种结构的指针之间有区别吗?

c++ - C++ 中的 rand() 函数

C编程: Create and write 2D array of files as function

c - x86 上的简单 PAPI 分析中意外出现大量 TLB 未命中

c - 如何使用函数指针数组?

C安全地取整数的绝对值

c++ - 在 Linux 上的发布/优化二进制文件中的信号处理程序中打印回溯

c - 如何进行这个初始化?

c - 使用 AVX-512 收集/分散 16 位整数

c - header 中函数名称之前应有初始值设定项。 C