[英]Convert a char to an int in C
我想制作一个将3www2as3com0
转换为www.as.com
的程序,但是一开始我遇到了麻烦。 我想将字符串的第一个数字(字符3)转换为整数,以使用诸如strncpy
或strchr
类的函数,因此当我打印转换为int
的程序时,程序显示51而不是3。这是什么问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
/* argv[1]--->3www2as3com0*/
char *string;
char *p;
string=argv[1];
p=string;
char cond,cond2;
cond=*p; //I want to have in cond the number 3
cond2=(int)cond; //I want to convert cond (a char) to cond2(an int)
printf("%d",cond2); //It print me 51 instead of 3
return (EXIT_SUCCESS);
}
您的计算机显然以一种称为ASCII的方案编码字符串。 (我可以肯定,大多数现代计算机都将ASCII或超集(例如UTF-8)用于char*
字符串)。
请注意,可打印字符和不可打印字符都被编码为数字。 51是字符“ 3”的数字。
ASCII的一个不错的功能之一是所有数字的编码都从“ 0”开始递增。
这样就可以通过计算aDigitCharacter - '0'
来获得数字的数值。
例如: cond2 = cond - '0';
编辑:
您还应该通过确保字符在'0'
和'9'
之间来仔细检查字符是否确实是数字;
如果要将包含多个位数的字符串转换为数字,则可能需要使用atoi
。 可以在<stdlib.h>
找到它。
字符的整数值是数字的ASCII码,而不是它实际代表的数字。 您可以通过减去'0'
来进行转换。
if( c >= '0' && c <= '9' ) val = c - '0';
似乎您正在使用的字符串永远不会有负数,因此您可以使用atoi(),从char返回整数值。 如果遇到的东西不是数字,它将得到直到此为止积累的数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.