0

我想制作一个转换3www2as3com0为的程序,www.as.com但一开始我遇到了麻烦;我想将字符串的第一个数字(字符 3)转换为整数,以便在打印转换后的程序显示 51 而不是 3 时使用类似的函数strncpystrchrint什么问题?

#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);
}
4

3 回答 3

3

您的计算机显然以一种称为ASCII的方案对字符串进行编码。(我相当确定大多数现代计算机使用 ASCII 或超集,如 UTF-8 来表示char*字符串)。

请注意可打印和不可打印字符是如何编码为数字的。51 是字符“3”的编号。

ASCII 的优点之一是所有数字都有从“0”开始的递增代码。

这允许人们通过计算得到一个数字的数值aDigitCharacter - '0'

例如:cond2 = cond - '0';

编辑:

您还应该通过确保字符位于'0'and之间来仔细检查字符是否确实是数字'9'

如果要将包含多个数字的字符串转换为可能需要使用的数字atoi。它可以在<stdlib.h>.

于 2013-08-09T02:31:04.173 回答
0

字符的整数值是数字的 ASCII 码,而不是它实际代表的数字。您可以通过减法转换'0'

if( c >= '0' && c <= '9' ) val = c - '0';
于 2013-08-09T02:31:06.527 回答
0

似乎您使用的字符串永远不会有负数,因此您可以使用 atoi(),从 char 返回整数值。如果它遇到不是数字的东西,它将获得在那之前建立的数字。

于 2013-08-09T06:10:10.820 回答