我正在尝试将字符串中的每个字母转换为它的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*
”。
答案 0 :(得分:7)
atoi()
需要一个字符串。你只需要字符的char代码...... 这是字符本身,因为在C中,char
是一个普通的整数类型,就像其他所有整数一样,字符串是一个char
的数组,用于保存字符代码。
因此,
int letter = ptext[i];
可以胜任。
答案 1 :(得分:2)
您无需将字符转换为数字。这是对您的数据的解释问题。
Charater'A'可以被认为是0x41或65,所以这很好:
int number = 'A';
并且变量编号的值为0x41 / 65或1000001b,具体取决于您要如何呈现/处理它。
至于解释:如果将0xFF表示为无符号值,则0xFF可被视为255;如果将其视为有符号值,则可将其视为-1。
所以你的问题:
可以将字符串转换为ASCII值吗?
有点不对 - 字符串的所有字符都已经是ascii值 - 这只是你如何处理/打印/解释/呈现它们的问题。
答案 2 :(得分:1)
int letter = (atoi(ptext[i]));
atoi()
将字符串转换为整数而非字符。
将字符的ascii值存储到整数变量中将字符直接赋值给整数变量。
int letter = ptext[i];