我想将单个字符转换为long,这是代码:
<a href ui-turn-on="modal1" ng-click="openModal()">link</a>
但它不能正常工作,帮助我们。
答案 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] - 0x30
或a[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。所以你必须减去它才能得到实际的整数。