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字符集中计算出来。但是,如果我无法帮助它,我宁愿不增加更多的复杂性。
非常感谢任何建议,
答案 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
可修复此问题。