首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C中执行无符号长整型和字符数组的XOR操作?

如何在C中执行无符号长整型和字符数组的XOR操作?
EN

Stack Overflow用户
提问于 2011-10-21 07:38:22
回答 4查看 3.8K关注 0票数 2

这是我要用来进行xor运算的两个变量(在C中)。

代码语言:javascript
复制
unsigned long int z=0xB51A06CD;

unsigned char array[] = {0xF0,0xCC,0xAA,0xF0};

desired output= 0X45D6AC3D

我知道我不能做一个简单的z ^ array,因为它是一个字符数组,而不是一个字符。我是必须一次做一个字节的XOR操作,还是在C中有一个函数可以做XOR操作?

我尝试了各种疯狂的事情来完成它,但总是惨败。如果有人能帮我一小段代码,或者至少是一个粗略的想法,我将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2011-10-21 07:42:52

array (被视为指向类似表达式中第一个元素的指针)转换为长指针而不是字符指针,并取消对其的引用。

代码语言:javascript
复制
unsigned long result = z ^ *(unsigned long *)array;
票数 3
EN

Stack Overflow用户

发布于 2011-10-21 07:44:38

只需在数组中创建一个unsigned long int (警告,这取决于机器的字节顺序!):

代码语言:javascript
复制
unsigned long int z=0xB51A06CD;
unsigned char array[] = {0xF0,0xCC,0xAA,0xF0};

unsigned long int w = 0;
w |= array[0] << 0;
w |= array[1] << 8;
w |= array[2] << 16;
w |= array[3] << 24;

unsigned long output = z ^ w;
票数 1
EN

Stack Overflow用户

发布于 2011-10-21 07:45:23

代码语言:javascript
复制
unsigned long int z=0xB51A06CD;

unsigned char array[] = {0xF0,0xCC,0xAA,0xF0};
unsigned long tmp;
memcpy(&tmp, array, sizeof tmp);
... z ^ tmp ...

注意,这仍然做了一些不可移植的假设:unsigned long是4个字节,系统的字节顺序是您所期望的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7843523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档