如何解决如何从 ASCII 转换为 INT
我有一个带有数字的字符串“a”(例如“我有 4 个苹果”),并且我试图将数字“4”放入一个 int 变量中,但它没有给我 ASCII 代码,在这种情况下“52”(ASCII 4 为 52)。
我尝试过 int y = (int)a[8]
但它不起作用。
解决方法
如果消息应该具有您作为示例给出的确切形状,那么您可以尝试下面代码的第一部分。
sscanf()
函数分析字符串,并可以匹配文字以及您在变量中提取的值。
编辑
还提供了一个更灵活的版本,以便检测字符串中任意位置的整数。
这个想法是用 %s
一个一个地提取单词并跳过它们,这要归功于 %n
已知的结束位置,直到这样的单词被认为是一个整数。
/**
gcc -std=c99 -o prog_c prog_c.c \
-pedantic -Wall -Wextra -Wconversion \
-Wc++-compat -Wwrite-strings -Wold-style-definition -Wvla \
-g -O0 -UNDEBUG -fsanitize=address,undefined
**/
#include <stdio.h>
int
main(void)
{
// fixed shape for the message
const char *msg="I have 4 apples";
int number=-1;
if(sscanf(msg,"I have %d apples",&number)==1)
{
printf("number=%d\n",number);
}
// more flexible version
const char *msg2="Number 5 appears here";
while(*msg2!='\0')
{
char word[20]="";
int pos=-1;
sscanf(msg2,"%s%n",word,&pos);
int number=-1;
if(sscanf(word,"%d",&number)==1)
{
printf("number=%d\n",number);
break;
}
msg2+=pos; // skip this word
}
return 0;
}
,
我倾向于这样做的方法是从中减去 '0'
。
例如
char x = '8';
int y = x - '0';
char 通常只是一个 int 而数字的 ASCII 是连续的,所以如果你能得到从 '0'
到你的数字的偏移量,你就会得到数字的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。