我正在尝试将字符串中的每个字母转换为其ASCII数字。 用
int letter = (atoi(ptext[i]));
给我这个错误:
error: incompatible integer to pointer conversion
passing 'char' to parameter of type 'const char *'; take the
address with & [-Werror]
int letter = (atoi(ptext[i]));
^~~~~~~~
&
/usr/include/stdlib.h:148:32: note: passing argument to parameter
'__nptr' here
extern int atoi (__const char *__nptr)
以下是我的其余一些代码可能相关的内容:
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, string argv[])
{
printf("Give a string to cipher:n");
string ptext = GetString();
int i = 0;
if (isupper(ptext[i]))
{
int letter = (atoi(ptext[i]));
}
}
我做错了什么,如何解决这个问题,以便我可以将字符串转换为 ASCII 值?
注意:cs50.h
让我在main中使用" string
"而不是" char*
"。
atoi()
需要一个字符串。你只需要字符的字符代码...这是字符本身,因为在 C 中,char
是正常的整数类型,就像其他整数一样,字符串是保存字符代码本身的 char
数组。
因此
int letter = ptext[i];
会做这项工作。
您不需要将字符转换为数字。这是对数据的解释问题。
字符"A"可以被认为是0x41或65,所以这完全没问题:
int number = 'A';
变量数上的值为 0x41/65 或 1000001b,具体取决于您希望如何呈现/处理它。
至于解释:0xFF如果将其显示为无符号值,则可能被视为 255,或者当被视为有符号并保留在 8 位时,甚至可以被视为 -1。
所以你的问题:
可以将字符串转换为 ASCII 值吗?
有点错误 - 字符串的所有字符都已经是 ASCII 值 - 这只是您如何处理/打印/解释/呈现它们的问题。
int letter = (atoi(ptext[i]));
atoi()
将字符串转换为整数而不是字符。
要将字符的 ascii 值存储到整数变量中,请将字符直接分配给整数变量。
int letter = ptext[i];