C:如何向字符添加字符,当达到最大字符数时,将其循环回“a”?

C:如何向字符添加字符,当达到最大字符数时,将其循环回“a”?,c,char,C,Char,我正在创建一个简单的加密程序。 我正在向chars添加chars以创建新的char 到目前为止,新的“char”通常由“?”表示 我的假设是char变量有一个max sum,一旦它被传递,它就会循环回0 假设逻辑: 如果字符a==1&&char z==255 那么256应该=a 事实并非如此 此代码段将一个字符添加到一个字符中。 它通常打印出如下内容: for (int i = 0; i < half; ++i) { halfM1[i] = halfM1[i] + halfP1[i

我正在创建一个简单的加密程序。 我正在向chars添加chars以创建新的char

到目前为止,新的“char”通常由“?”表示

我的假设是char变量有一个max sum,一旦它被传递,它就会循环回0

假设逻辑:

如果字符a==1&&char z==255 那么256应该=a

事实并非如此

此代码段将一个字符添加到一个字符中。 它通常打印出如下内容:

for (int i = 0; i < half; ++i) {
    halfM1[i] = halfM1[i] + halfP1[i];
    halfM2[i] = halfM2[i] + halfP2[(half + i)];
}

printf("\n%s\n", halfM1 );
printf("%s\n", halfM2);
此代码段删除添加的字符,字符串恢复正常

for (int i = 0; i < half; ++i) {
    halfM1[i] = halfM1[i] - halfP1[i];
    halfM2[i] = halfM2[i] - halfP2[(half + i)];
}

printf("\n%s\n", halfM1 );
printf("%s\n", halfM2);
该代码在技术上是有效的,但我希望加密是在字符

如果有人问为什么“一半”到处都是。
消息和密钥被一分为二,因此消息的前半部分和后半部分有单独的加密。

首先,对于公共字符没有环绕这样的事情。在x86中,公共字符是有符号类型,有符号整数没有换行符。相反,溢出会导致未定义的行为。此外,字符的范围可以是-128。。。127,甚至是什么

出于加密目的,您可能希望使用无符号字符,或者更好的是,使用uint8\t的原始八位字节

第二个问题是您正在使用%s打印。可能产生的256个字符之一是\0。如果这进入结果字符串,它将提前终止该字符串。您应该使用fwritehalfM1,buffer_size,1,stdout来输出它,而不是使用%s。当然,问题是输出仍然是一些二进制垃圾。为此,许多Unix加密程序将写入文件,或者可以选择输出。一个简单的ASCII铠装将输出为

第三,有一种操作在加密方面比加法/减法好得多:,或halfM1[i]=halfM1[i]^halfP1[i];-它的美妙之处在于它是它自己的反面

for (int i = 0; i < half; ++i) {
    halfM1[i] = halfM1[i] - halfP1[i];
    halfM2[i] = halfM2[i] - halfP2[(half + i)];
}

printf("\n%s\n", halfM1 );
printf("%s\n", halfM2);
messagepart1
messagepart2