问大家一个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);

num=num*10+(str[i]-'0');
这一句实现了字符串到数字的转化。
首先: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语言问题。下面的将字符转换成数值是怎么转换的啊,看不懂,请大家帮帮忙啊,的主要内容,如果未能解决你的问题,请参考以下文章

R语言将字符串矩阵转化为数值型矩阵

C语言中,如何将一个数组中的数值转换成字符串输出?

C语言中,如何将一个数组中的数值转换成字符串输出?

C语言中怎么把Int型转成字符型?

C语言 将一个整数转换成一个字符串

如何将下面的C语言转化成C#