gpt4 book ai didi

c - 为什么我的 ASCII 整数值变成负数?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:14 26 4
gpt4 key购买 nike

我正在尝试通过使用 C 中的 ASCII 字符操作来执行一种非常基本的加密和解密形式。我有以下代码:

char* myEncrypt(char* stringToEncrypt)
{
char *encryptedString = malloc(256);
strcpy(encryptedString, stringToEncrypt);

int publicKey = 50;

for (int i = 0; encryptedString[i] && encryptedString[i] != '\n'; ++i)
encryptedString[i] = (encryptedString[i] + publicKey) % 256;

return encryptedString;
}

我的问题是,当我运行这段代码时,我经常得到分配给 encryptedString[i] 的 ASCII 字符整数值的负值。这导致解密失败。查看代码,我应该无法获得负值,因为我使用的是模运算。我在这里遗漏了一些简单的东西吗?

最佳答案

许多实现使用带符号的字符作为普通 char。如果您需要无符号字符,则需要使用 unsigned char

例如,如果 char 的值为 100,加上 50,就会得到 150。如果 CHAR_MAX 的值为 127(典型值),则结束将实现定义的值分配回您的角色——很可能环绕到 -106。

此外,在 C 中,负值在模运算后仍将是负值。例如:-50 % 256 就是 -50。因此,如果您的原始字符串包含小于 -50 的字符,那么在加上 50 并取模 256 之后,您最终会得到负值。

关于c - 为什么我的 ASCII 整数值变成负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35422663/

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