我想对指针指向的两个内存位置执行按位或运算并将其存储为字符数组。
我对两个内存位置执行 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/