问大家一个C语言问题。下面的将字符转换成数值是怎么转换的啊,看不懂,请大家帮帮忙啊,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问大家一个C语言问题。下面的将字符转换成数值是怎么转换的啊,看不懂,请大家帮帮忙啊,相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
main( )
int flag=0,i=0;
long num=0;
char str[ ]="-1688"; /*将数字字符串放在一维字符数组s中*/
while(str[i]!='\0')
if(str[i]=='-')
flag=1; /*判断数的正负,为-表示负数*/
else
if (str[i]=='+')
flag=0; /*判断数的正负,为+表示正数*/
else
num=num*10+(str[i]-'0'); /*将字符转换成数值*/
i++;
if (flag==1) num=-num;
printf("\n由数字字符串转换成的整数是:%ld", num);
这一句实现了字符串到数字的转化。
首先:char型都有个ASCII码值,str[i]-'0'就把数字字符便成了相应的数字值。
再者:num=num*10+每次读到一个数字,就把num乘10,再加上这个数字,由于是从高位读取的,就还原出了这个数。就像23可以分解成:2*10+3一样,逐步分解的反向操作,就合成了数字。
循环中其他语句都是为了判断数字的正负符号。
再在if (flag==1) num=-num;的时候把正数变成负数。 参考技术A num=num*10+(str[i]-'0'); /*将字符转换成数值*/
是因为,c语言中字符是以ascII码形式存放的,它可以作为数值进行加减运算,而且字符'0'至'9'是连续的,也就是说字符'1'与字符'0'做差后其值为数字1;
所以(str[i]-'0')是求出当前位的数值.NUM=NUM*10是因为每多一个数,说明它前面的数位将高一位.这样,我们先看一下它的执行过程:
表 达 式: i str[i] (str[i]-'0') num
第一次循环 0 '-' 不执行 0
第二次 1 '1' 1 1
... 2 '6' 6 16
... 3 '8' 8 168
... 4 '8' 8 1688
... 5 '\0' 退出 参考技术B 原理楼上4位已经说得很明白了,我来代码吧.
还有,你是想问字符串转数字吧?
字符转的方法: char c = '1'; int n = c - '0'; n 就是 1
字符串的:
#include <iostream>
using namespace std;
int StrToInt( char *s )
char *p = s;
int i = 0, k = 1;
while( *s ) s++;
s--;
while( s >= p )
i += (*s - '0')* k ;
k *= 10;
s --;
return i;
int main()
cout<< StrToInt( "1234" ) <<endl;
return 0;
参考技术C num=num*10+(str[i]-'0'); /*将字符转换成数值*/
关键就是这一句,str[i]-'0'是在计算字符str[i]和字符'0'的ASCII码的差,如果str[i]是一个数字字符,那么这个差就正好等于str[i]所表示的数字。
C语言:怎么将十六进制字符串转换成二进制字符串,谁帮我写个函数
参考技术A 十六进制转成十进制的函数://返回16进制字符串s对应的整数值,遇到任何一个非法字符都返回-1。
int HexToDec(char *s)
char *p = s;
//空串返回0。
if(*p == '\0')
return 0;
//忽略开头的'0'字符
while(*p == '0')
p++;
int dec = 0;
char c;
//循环直到字符串结束。
while(c = *p++)
//dec乘16
dec <<= 4;
//数字字符。
if(c >= '0' && c <= '9')
dec += c - '0';
continue;
//小写abcdef。
if(c >= 'a' && c <= 'f')
dec += c - 'a' + 10;
continue;
//大写ABCDEF。
if(c >= 'A' && c <= 'F')
dec += c - 'A' + 10;
continue;
//没有从任何一个if语句中结束,说明遇到了非法字符。
return -1;
//正常结束循环,返回10进制整数值。
return dec;
十进制转成二进制的函数:
/*递归法求二进制数*/
#include<stdio.h>
void printb(int x,int n);
void main()
int x;
printf("input number:");
scanf("%d",&x);
printf("number of decimal form: %d\n",x);
printb(x,sizeof(int)*8);
putchar('\n');
void printb(int x,int n)
if(n>0)
putchar('0'+( (unsigned)(x & (1<<(n-1) ) )>>(n-1)));
printb(x,n-1);
追问
我现在要得到二进制的字符串啊,不是输出来
追答#include
void main()
char c[16];
int a[16][4]=0;
int i=0,j;
scanf("%s",c);---->>以字符串形式输入
while(c[i])--------->>>把字符串的每一位还原为数字
if(c[i]>'0'&&c[i]='A'&&c[i]='a'&&c[i]=0;j--)
a[i][j]=c[i]%2;
c[i]/=2;
for(j=0;j<4;j++)
printf("%d",a[i][j]);
i++;
以上是关于问大家一个C语言问题。下面的将字符转换成数值是怎么转换的啊,看不懂,请大家帮帮忙啊,的主要内容,如果未能解决你的问题,请参考以下文章