Tag: xor

使用XOR交换两个指针

我有一个关于使用XOR两个交换两个字符串文字的快速问题。 所以我有以下内容: #include #include #include void intSwap(int *a, int *b){ *a=*a^*b; *b=*a^*b; *a=*a^*b; } void swapString(char **a, char **b){ char *temp=*a; *a=*b; *b=temp; } void main(){ char *s= “ha”; char *t= “Oh”; printf(“%s and %s \n”,s,t); // prints ha Oh swapString(&s,&t); printf(“%s and %s \n”,s,t); // prints Oh ha int a=10; int b=5; printf(“%d %d\n”,a,b); […]

如何使用逐位XOR加密文本文件?

我试图通过使用来自另一个文件(keys.txt)的两个特定键的左右字符的逐位XOR操作来加密来自文本文件的消息,但是我在原始文本前面接收到不可读的代码文件(没有改变),这是不对的。 我使用两个文本文件: 1)Input.txt – 包含要加密的消息 2)Keys.txt – 包含两个字符,对input.txt中的每个字符执行XOR操作(字符1是键1,字符2是键2) 我的程序中的以下代码: str[i]=str[i]^str2[2]; str[++i]=str[i]^str2[1]; break; 是要执行XOR操作的代码行 注意我想要的输出应该类似于: m @#EmI(> 9S(@)H#FmN#XGmmmmU,H!Gmr(DmI“VmD,F(S!XmU%DmM”C> U(S>,O)9I(9T?U!D>, M!,E; @#B(Gmu%D4,S(:@ $ U $ O *“OmU%DmR%H#F!D`V $ M!4N8.N Dm @#EmK”H#9I(+ MMMM)@#B(F 有人可以澄清我遇到的问题吗? 用户应输入: gcc myProgram.c ./a.out e input.txt keys.txt (e只代表加密) #include #include #include int main(int args, char *argc[]){ int i; int len=0; char str[1024]; char str2[2]; […]

在重复元素XOR运算符的数组中找到两个非重复元素?

假设我有一个包含2n + 2个元素的数组。 数组中的n个元素出现两次,剩下的两个元素是唯一的。 你必须在O(n)时间和O(1)空间中解决这个问题。 其中一个解决方案是使用XOR。 但我无法理解这一点。 任何人都可以帮助我,或者可以给我更好的解决方案吗? 问题和解决方案的链接就是这个

XOR在一个非常大的文件上

我想XOR一个非常大的文件(~50 Go)。 更确切地说,我想通过使用密钥3847611839对明文文件的32个字节的每个块进行异或(因为内存不足)并创建(块后块)新的密码文件。 感谢您的任何帮助!!

如何异或在C中加扰字符串并使用相同的函数再次返回?

我试图在程序中混淆一个字符串。 目前,我只有一个简单的字符串反转工作。 我希望能够对数据执行XOR加扰以使其更安全,但是我尝试过的方法不起作用。 相同的函数和输入类型用于解码字符串。 这对于字符串反转没有问题,因为它只是反转,但是这可以通过XORing轻松完成而不会过于复杂吗? 我希望如果进程只保留一个字符串,就像反转一样。 这是我的逆转function。 void reverse_string(unsigned char *buf, int length) { int i; unsigned char temp; for (i = 0; i < length / 2; i++) { temp = buf[i]; buf[i] = buf[length – i – 1]; buf[length – i – 1] = temp; } } 这是XORfunction的尝试 void charxor(char * text, int […]

在许多情况下,使用XOR运算符来查找数组中的重复元素会失败

我遇到了一篇文章如何在一个混洗的连续整数数组中找到一个重复的元素? 但后来意识到这很多输入失败了。 例如: arr[] = {601,602,603,604,605,605,606,607} #include int main() { int arr[] = {2,3,4,5,5,7}; int i, dupe = 0; for (i = 0; i < 6; i++) { dupe = dupe ^ a[i] ^ i; } printf ("%d\n", dupe); return 0; } 如何修改此代码,以便可以找到所有案例的重复元素?

如何使用SIMD加速XOR两块内存?

我想尽可能快地对两块内存进行异或,我如何使用SIMD来加速它? 我的原始代码如下: void region_xor_w64( unsigned char *r1, /* Region 1 */ unsigned char *r2, /* Region 2 */ int nbytes) /* Number of bytes in region */ { uint64_t *l1; uint64_t *l2; uint64_t *ltop; unsigned char *ctop; ctop = r1 + nbytes; ltop = (uint64_t *) ctop; l1 = (uint64_t *) r1; l2 = (uint64_t […]

我如何按位XOR两个C char数组?

我觉得愚蠢无法解决这个问题,但我迷失了。 我试图XOR两个C字符串。 #include #include #include int main() { char plainone[16]; char plaintwo[16]; char xor[17]; strcpy(plainone, “PlainOne”); strcpy(plaintwo, “PlainTwo”); int i=0; for(i=0; i<strlen(plainone);i++) xor[i] ^= (char)(plainone[i] ^ plaintwo[i]); printf("PlainText One: %s\nPlainText Two: %s\n\none^two: %s\n", plainone, plaintwo, xor); return 0; } 我的输出是: $ ./a.out PlainText One: PlainOne PlainText Two: PlainTwo one^two: 为什么xor数组不能读作什么?

XOR链表的C代码

我一直在尝试实现XOR链接列表及其操作,但我无法正确执行。 是否可以在C中实现它,因为XOR链接列表涉及对地址的操作? 如果给出一些实际的工作代码,我将非常感激。

C中的逻辑运算符有什么意义?

我只是想知道在C中是否有一个XOR逻辑运算符(类似于&& for AND但是对于XOR)。 我知道我可以将XOR分成AND,NOT和OR,但简单的XOR会好得多。 然后我发现如果我在两个条件之间使用普通的XOR位运算符,它可能会起作用。 对于我的测试,它做到了。 考虑: int i = 3; int j = 7; int k = 8; 仅仅为了这个相当愚蠢的例子,如果我需要k大于i或大于j而不是两者,XOR将是非常方便的。 if ((k > i) XOR (k > j)) printf(“Valid”); else printf(“Invalid”); 要么 printf(“%s”,((k > i) XOR (k > j)) ? “Valid” : “Invalid”); 我把按位XOR ^ ,它产生“无效”。 将两个比较的结果放在两个整数中导致2个整数包含1,因此XOR产生错误。 然后我用&和|尝试了 按位运算符和两者都给出了预期的结果。 知道真实条件具有非零值,而虚假条件具有零值,所有这些都是有意义的。 我在想,是否有理由使用逻辑&&和|| 当按位运算符&,| 和^工作一样吗?