微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么“f”和“g”ASCII字符在这段代码中变成负数?

如何解决为什么“f”和“g”ASCII字符在这段代码中变成负数?

#include <stdio.h>

/*************** CAESAR CYPHER *****************

  -Take a charater array input
  -Loop through 26 character shifts
  -Print all possibilities
  
************************************************/

void Brute_Force(char *message)// Character array pointer
{
    char *i;// copy message for iteration: Stop at '/0'
    int j;// Iterate through the alphabet
    char t;//Temp variable for current letter
    
    for(j = 0; j < 26; j++)
    {   
        printf("\n----------Shift %i----------\n",j);//Aesthetics

        for(i = message; *i != '\0'; i++)
        {
            //Multiple of 26 to start at original message
            unsigned char t = ((*i + j)%26) + 104;
            
            // Only loop 97 to 122. ASCII 'a'-'z'
            if(t > 122){t = t - 26;}
            printf("%c",t);
        }
    }
}

int main()
{
    char mess[26] = "ynkooejcpdanqxeykjrbdofgkq";
    Brute_Force(mess);
    return 0;
}

在将 t 更改为 unsigned char 而不是常规的 char 之前,每次出现 'f'(102) 或 'g'(103) 时,它都会输出 { {1}} 而不是 t = -127/-128。我只是想知道是什么导致它变成负面的。仅适用于 'f' 和 'g',其他所有字母都是正确的。

示例输出为:

127/128

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。