【问题标题】:(SOLVED)Trying to cast an integer to a char(已解决)尝试将整数转换为字符
【发布时间】:2024-01-18 04:21:01
【问题描述】:

所以我正在尝试编写一个可以用作密码的代码。它将输入要加密的单词作为输入并输出(打印)编码的单词。我的代码有问题的 sn-p 是 for 循环。


#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(void)
{
   
        char input[] = "hello";
        printf("hello\n");
        printf("ciphertext: ");
        for (int i = 0; i < 5; i++)
        { 
            if(isalpha(input[i]))
            {
                int current = input[i];
                int cypher = ((current + 1) % 26 )+current;
                char out = (char)cypher;
                printf("%c", out);
            }
            else
            {
                printf("%c", input[i]);
            }

        }
        printf("\n");
        
}

我在调试时遇到的问题是最终存储在“out”中的值似乎是正确的,但是在打印它时,它完全显示了其他东西。我确实查找了很多我在这里找到的东西,例如这样编写代码:

char out = (char)cypher;
char out= cypher + '0';

等等,但无济于事。输出应该是 ifmmp 而是我得到 j~rrx

任何事情都会有帮助!谢谢:)

【问题讨论】:

  • 105 'i' 这正是调试器显示存储在out 中的值的方式,即105。因为它是一个 char 变量,所以它添加了 ASCII representation i 但这只是信息。
  • 听起来你对调试器的输出感到困惑。向您展示 out 包含十进制 108、十六进制 0x6c 或 ascii 'l',这些都是对同一个字节的不同解释。见asciitable.com
  • 在您的示例中,知道int current = input[i]; 中的i 是什么会很有帮助... MCVE 需要。
  • @DavidC.Rankin 在for循环里面,我已经更新了
  • 执行相对于'a'的mod:char out = (input[i] - 'a' + 1)%26 + 'a';小写input[i]

标签: c++ c debugging casting c++17


【解决方案1】:

你得到了正确的答案。 105 是 ASCII 值“i”。没有区别。更准确地说,char 类型被定义为整数。在几乎所有编译器上,它的大小都是 8 位。所以unsigned char 的值可以在 0 到 255 之间;带符号的 char 的值可以介于 -128 和 +127 之间。

因此,当您的 out 变量的值为 105 时,它的值为 'i'。

printf 的输出将是:

i

但如果您在调试器中查看out 变量,您可能会看到105,具体取决于调试器。

【讨论】:

  • 是的,我明白这一点。然而,我得到的输出是 j~rrx,即使我的“out”变量似乎存储了正确的值
最近更新 更多