c - 指针指向的两个内存位置的 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 ???
}
有什么建议么 ?
解决方案
您似乎想对这两个结构的表示进行操作。你真的应该使用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
推荐阅读
- java - 如何使用 Groovy 在 Outlook 中创建“免费”条目?
- node.js - 如何显示完整的属性路径 Joi 验证
- laravel - 通过修剪函数将输入名称变量转换为在数据库中搜索
- elasticsearch - 在logstash中分离键值对
- javascript - 如何在 switch 语句中传递按钮 ID 以执行该按钮应该执行的任何功能?
- xamarin - Xamarin Forms:IOS 上的 Webview 自动打开 IFrame
- angular - “可观察”类型上不存在属性“distinctUntilChanged”
' - java - 如何在 java 中使用 REST/SOAP 获取联邦快递的跟踪详细信息?
- database - 在 laravel 5.4 中更新列值
- javascript - 使用 for 循环的 Javascript 倒计时