将ascii转换为int

时间:2010-11-25 17:30:51

标签: c

gcc 4.5.1 c89

我有一个填充了char字符的缓冲区。我需要比较它们:

这是缓冲区的示例内容:

vote buffer [ 51 ]
vote buffer [ 32 ]
vote buffer [ 49 ]
vote buffer [ 32 ]
vote buffer [ 50 ]
vote buffer [ 32 ]
vote buffer [ 53 ]
vote buffer [ 32 ]

我正在尝试获取缓冲区中要比较的这些char的int等价物。

#define NUMBER_OF_CANDIDATES 7
if((vote_data.vote_buff[i] > NUMBER_OF_CANDIDATES || vote_data.vote_buff[i] < 1) {
    /* Do something */
}

正如你所看到的那样,在if语句中永远不会是真的,因为范围要大得多。

我尝试过转换为(int)。但是,这并没有解决问题。

我想我可以从ascii字符集中计算出来。但是,如果我无法帮助它,我宁愿不增加更多的复杂性。

非常感谢任何建议,

3 个答案:

答案 0 :(得分:5)

您可以使用atoi将字符串转换为整数。 Char和int在C

中是相同的
int main (int argc, char** argv)
{
 int n=65;


 char* String;

 String="1234";


 printf("String: %s - Integer: %d\n", String, atoi(String));


 printf("int %d is char: %c\n ", n, n);

}

答案 1 :(得分:4)

如果您只想将单个字符转换为int,则可以使用c - '0'(相当于c - 48)。如果要转换多个字符的字符串,请使用sscanf()

答案 2 :(得分:2)

标准库内置了任何内容,无法将char转换为int。这是因为大多数int不适合char。但是,有几种方法可以将字符串转换为int,因为这是更常见的。您可以通过将每个char复制到长度为2的数组的第一个元素并使用第二个字符0来轻松使用这些,并将其用作atoi()sscanf()或{{的输入1}}。 (我建议在实际程序中使用最后两个中的一个,因为它们允许错误检查。)

strtol()

使用ASCII值并减去char buffer[2] = {0,0}; int i; for (i = 0; i < vote_count; ++i) { int vote; buffer[0] = vote_data.vote_buff[i]; vote = atoi(buffer); /* handle vote */ } 当然是一个可行的选择。任何合理的字符集都会按顺序排列数字。

最好的是更改界面,以便您的例程不会收到'0'的数组,而是char的数组。程序的外部接口应负责清理输入并将其转换为易于处理的内容。目前,没有办法轻松改变该计划,以支持十多名候选人。让输入例程存储int可修复此问题。

相关问题