如何在C中将单个Char转换为Long?

时间:2015-09-22 06:30:36

标签: c

我想将单个字符转换为long,这是代码:

<a href ui-turn-on="modal1" ng-click="openModal()">link</a>

但它不能正常工作,帮助我们。

5 个答案:

答案 0 :(得分:2)

您的计算机最有可能使用ASCII alphabet,这意味着字符'1'(例如)被编码为数字49

幸运的是,通过减去字符'0',将字符转换为相应的数字很容易,就像在

中一样
val = a[j] - '0';

这是有效的,因为字符'0'的值等于48,当你执行'1' - '0'时,它与执行49 - 48相同,当然等于1 {{1}}。

即使你的系统没有使用ASCII字母表(极不可能),C规范说数字必须以连续的方式编码,所以这个&#34;技巧&#34;无论系统上使用的实际编码如何,它都能正常工作。

这个&#34;技巧&#34;也常用于获取字母顺序,因为在ASCII中字母A到Z和a到z遵循相同的模式(从链接表中可以看到)。但是,C规范并不能保证这一点,并且仍然使用的字符编码方案并不遵循(例如EBCDIC))。这些编码并不常见,但可能仍会在某些系统中找到。

答案 1 :(得分:1)

要将ASCII字符转换为整数,您需要执行val = a[j] - '0'

临时变量是多余的。

答案 2 :(得分:1)

正如所有其他答案所述,您必须使用a[j] - 0x30a[j]-'0'a[j]-48来获得int的{​​{1}}值。

顺便说一句,您的代码还有一件事需要纠正:ASCII digit不是%ld的格式。如果用-Wall编译代码,你将得到:

  

警告:格式'%ld'需要类型为'long int'的参数,但参数2的类型为'int'[-Wformat =]

改为使用int

答案 3 :(得分:0)

尝试使用int temp = a[j] - '0';代替int temp = a[j];

这应该有效,因为数字(数字)的字符代码是连续的。

N1256 5.2.1字符集

  

在源和执行基本字符集中,   上述小数位数列表中0后的每个字符的值应大于1   以前的价值。

答案 4 :(得分:0)

你可以尝试这个......

scanf("%s",&a);
length = strlen(a);

for(j = 0; j < length; j++){
    if(isdigit(a[j])){
        int temp = a[j] - 48;
        val = (long)temp;

        printf("number: %ld\n",temp);
        Push(&S, val);
    }
}

要转换为数字,您必须从该字符中减去48,即ACII值为'0'。当你只打印一个[j]作为整数时,它会打印它的ACII值,对于'0'到'9',它们可以分别从48到57。所以你必须减去它才能得到实际的整数。