C 没有隐式将 int 转换为 char

标签 c ascii implicit-conversion

printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26;);

其中 plaintextkeyword 属于 string 数据类型 (char *),count 是一个 int,keywordLengthstrlen(keyword) 的返回值。当我使用整数格式说明符时,会打印整数。但是,我希望它作为字母打印,但当我使用字符格式说明符时它什么也不打印。我不知道为什么。

对于我的示例,以下情况正确:

char * plaintext = "hello";
char * keyword = "abc";

最佳答案

代码正在打印控制字符:

printf("%c", (plaintext[i] + keyword[(count % keywordLength)]) % 26);

代码依赖于 printf("%c", 0); 打印字母,当它确实打印控制字符时 - 这可能不可见。

微妙的注意:代码依赖于 plaintext[i], keywords[] 仅包含非负值。如果 plaintext[i] + keywords[(count % keywordsLength)] 的总和小于 0,则 sum % 26 也将为负数。

要打印 [A-Z] 中的 ASCII 值,请添加 'A''a' @lurker .

int sum = plaintext[i] + keyword[(count % keywordLength)];
printf("%c", (sum % 26) + 'A');

迂腐地处理负sum并具有高度可移植性:

int sum = plaintext[i] + keyword[(count % keywordLength)];
// mod math, even for negative values
sum = ((sum % 26) + 26) % 26;
// Print letter, even when encoding is not ASCII
printf("%c", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[sum]);

关于C 没有隐式将 int 转换为 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46081097/

相关文章:

c - system()函数打开一个窗口

c - 为什么 `& 0xff` 在 Ruby 源代码中会这样执行?

character-encoding -\n\r 是多少字节?

C# ASCII 或 Unicode

c# - 从 Nullable 到 normal 的隐式转换,有什么想法吗?

c++ - 智能指针不能自动用作原始指针?

c - 奇数 'skip' 函数 : error when running is double loops

python - 我试图用 c 中的逻辑在 python 中实现行计数程序

java - 在十六进制和 ascii 之间转换时丢失字符

scala - 类型别名函数类型的隐式转换类无法在 Scala 中编译