这是我要用来进行xor运算的两个变量(在C中)。
unsigned long int z=0xB51A06CD;
unsigned char array[] = {0xF0,0xCC,0xAA,0xF0};
desired output= 0X45D6AC3D我知道我不能做一个简单的z ^ array,因为它是一个字符数组,而不是一个字符。我是必须一次做一个字节的XOR操作,还是在C中有一个函数可以做XOR操作?
我尝试了各种疯狂的事情来完成它,但总是惨败。如果有人能帮我一小段代码,或者至少是一个粗略的想法,我将不胜感激。
发布于 2011-10-21 07:42:52
将array (被视为指向类似表达式中第一个元素的指针)转换为长指针而不是字符指针,并取消对其的引用。
unsigned long result = z ^ *(unsigned long *)array;发布于 2011-10-21 07:44:38
只需在数组中创建一个unsigned long int (警告,这取决于机器的字节顺序!):
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;发布于 2011-10-21 07:45:23
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个字节,系统的字节顺序是您所期望的。
https://stackoverflow.com/questions/7843523
复制相似问题