gpt4 book ai didi

c - 如何在 C 中异或两个字节流?

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:02 24 4
gpt4 key购买 nike

在过去的几天里,我一直在通读 SO,试图弄清楚这一点,但我很困惑。我想读入两个 32 位字节数组(来自标准输入,输入将为十六进制)并对它们进行异或运算,然后打印结果。

到目前为止,我已经尝试过使用 scanf、fgets 和 gets。我的想法是将大的十六进制数读入 char 缓冲区并在 for 循环中执行异或运算,直到遇到 EOL(使用 fgets)或空终止符。到目前为止,我的输出还差得远。我尝试了很多变体,但我只会在下面发布我最近的失败。我一直试图完成的挑战是:http://cryptopals.com/sets/1/challenges/2/

我在 C 中尝试它,因为我真的很想学习 C,但我真的很沮丧,因为这些尝试都没有奏效。

#include <stdio.h> 
#include <math.h>

int main()
{
char buff1[100];
char buff2[100];
char buff3[100];
int size = sizeof(buff1);

puts("Enter value\n");
fgets(buff1, size, stdin);
puts(buff1);
puts("Enter value\n");
fgets(buff2, size, stdin);
puts(buff2);

for (int i = 0; i != '\n'; i++) {
buff3[i] = buff2[i] ^ buff1[i];
printf("%x", buff3[i]);
}

return 0;
}

最佳答案

当使用 sizeof() 时,它应该与类型一起使用,而不是数据。例如,如果你想要 100 个字符的空间,你需要找到 sizeof(char) 然后乘以 100 以找出你需要多少字节并进入缓冲区。一个 char 通常是一个字节,所以应该是 100 个字节。 fgets() 可以工作,但我更喜欢使用它

int getchar()

当用户访问时停止输入换行符/终止符。由于您不知道标准输入会输入多少字符,因此您需要动态增加缓冲区的大小,否则它会溢出。出于这个问题的目的,你可以把它做成一个非常大的数组,检查它是否即将溢出,然后终止程序。因此,回顾一下这些步骤。

1.) 创建一个大数组

2.) While 遍历 getchar() 并在输出为终止符时停止,注意你读了多少个字符。

3.) 因为两个缓冲区都保证有相同的字符,所以你最终数组的大小等于那么多字符。

4.) For loop over getchar() 并且当字符出来时,将它们与第一个数组异或并将结果放入最终数组。您应该尝试使用 1 个数组执行此操作之后再进行一些 C 语言练习。

祝你好运!

编辑:

可以使用 fgets(),但根据具体实现,了解已读入的字符数很有用。

关于c - 如何在 C 中异或两个字节流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com