gpt4 book ai didi

c++ - 对字符求和并减去得到文件

转载 作者:行者123 更新时间:2023-11-30 03:30:24 26 4
gpt4 key购买 nike

我正在编写一个程序,用一个随机数对文件中的一个字符求和,然后再减去该文件。

问题是当我对它们求和并相减时,生成的文件不一样。

可能是我的数学不好或者我对字符不了解。

求和代码(已编辑):

while (!feof(filename))
{
size_t read = fread(&buf, sizeof(char), max_array, filename);
for (unsigned long long i = 0; i < read; i++)
{
unsigned char rdn = GetRandom_Soft();
/*
if (buf[i] + rdn > 255) buf[i] = (buf[i] + rdn) - 255;
else buf[i] = buf[i] + rdn;
*/
buf[i] = buf[i] + rdn;
num[i] = rdn;
}
fwrite(&num, sizeof(char), read, filename_n);
fwrite(&buf, sizeof(char), read, filename2);
}

代码 GetRandom()(已编辑):

int GetRandom_Soft()
{
return rand() % 256;
}

要减去的代码(已编辑):

while (!feof(filename2))
{
size_t read_c = fread(&num, sizeof(char), max_array, filename_n);
fread(&buf, sizeof(char), max_array, filename2);
for (unsigned long long i = 0; i < read_c; i++)
{
buf[i] = buf[i] - num[i];
/*
if(buf[i] - num[i] < 0) buf[i] = (buf[i] - num[i]) +255;
else buf[i] = buf[i] - num[i];
*/
}
fwrite(&buf, sizeof(char), read_c, filename);
}

*********更新 1*********

filename = 指向原始文件的文件指针

filename_n = 指向带有编号的文件的文件指针

filename2 = 指向文件的文件指针,包含 filenamefilename_n

*********更新 2(已编辑)*********

字符数组声明:

整数[9999]

int buf[9999]

int rdn[9999]

最佳答案

GetRandom_Soft() 返回 char,其取值范围为 [-128;127],您尝试从 [0 ; 127] 范围内分配值。 255] - 无法正常工作。

我也怀疑你在这里做类似的事情:

buf[i] = buf[i] + rdn;

这里:

buf[i] = buf[i] - num[i];

我怀疑 bufnum 或两者的类型与 char* 不同(例如 unsigned char*) AND/OR 加法或减法的结果超出 char 值范围,这会破坏结果。

编辑

更新后,几乎可以肯定是 unsigned char 溢出的问题。 unsigned char 取值范围 [0;255] - 如果加法结果 > 255 或减法结果 < 0,那么你将得到错误的结果。对于您的数字,将值解释为 int 似乎更有意义。

关于c++ - 对字符求和并减去得到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45007750/

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