C语言怎么把字符串转换为可以用于计算的数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言怎么把字符串转换为可以用于计算的数字相关的知识,希望对你有一定的参考价值。
现在有92283976 73b1c080 1e448b0 bd44dae6e 这一串是以字符串形式存储的数据
要怎么把她读取到一个整形的数组中用于进行计算呢!!!!
后面一段还是16进制的
(1)使用常用标准函数库stdlib当中的字符串转换函数,可以把各种类型的字符串转换为相应类型的数字。
(2)使用输入输出标准函数库stdio当中的sscanf函数。
用标准库中的sscanf函数(其中格式控制字符的使用方法和scanf一致,%d读十进制整数,%x读16进制整数)。例如:char s[] = "92283976 73b1c080 1e448b0 bd44dae6e";int a, b, c, d;sscanf(s, "%d%x%x%x", &a, &b, &c, &d);前提是要保证字符串格式和格式控制符一致,否则后果不确定。另外,这里bd44dae6e在32位平台上超过int范围,如果要正确读入的话,需要使用long long,对应格式控制字符改用Lx或llx。
atof() 将字符串转换为双精度浮点型值;atoi() 将字符串转换为整型值;atol() 将字符串转换为长整型值;strtod() 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字 ;strtol() 将字符串转换为长整值,并报告不能被转换的所有剩余数字 ;strtoul() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。
参考技术A有两种方式,一种是使用常用标准函数库stdlib当中的字符串转换函数,可以把各种类型的字符串转换为相应类型的数字;另外一种是使用输入输出标准函数库stdio当中的sscanf函数。
方法一:
下列函数可以将字符串转换为数字:
------------------------------------------------------------------------
函数名 作 用
------------------------------------------------------------------------
atof() 将字符串转换为双精度浮点型值
atoi() 将字符串转换为整型值
atol() 将字符串转换为长整型值
strtod() 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
strtol() 将字符串转换为长整值,并报告不能被转换的所有剩余数字
strtoul() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
------------------------------------------------------------------------
方法二:
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
第二个参数可以是一个或多个 %[*] [width] [h | I | I64 | L]type | ' ' | '\\t' | '\\n' | 非%符号
注:
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
2、a|b|c表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、width表示读取宽度。
4、h | l | I64 | L:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
5、type :这就很多了,就是%s,%d之类。
6、特别的:%*[width] [h | l | I64 | L]type 表示满足该条件的被过滤掉,不会向目标参数中写入值。
只说思路:
1. 如果你是想把每个数字都拆开存到int数组里,而不是想分别把4段从16进制转成10进制的值,那么可以这样:
定义一个[4][8]维的整形数组,或者干脆4个数组,
然后依次读取字符串的每个char(注意空格的处理,把空格前的数存到对应的数组里),如果是0 - 9之间的字符,直接在int数组里存下对应的整数;如果是a - e之间的字符,那么在整形数组中存下对应的16进制代表的整数,比如:a - 10,b - 11... e -15,好了,下面你想怎么计算就得自己设计了。
2.如果你想分别得到4段从16进制转换成10进制的整数总值,那么重复1的步骤,然后处理你得到的4个数组。比如第一个数组,依次读取每个数字,乘以16的(8 - 1)次方,(8 - 2)次方,类推。
希望能帮到你。 参考技术C sscanf 参考技术D 用标准库中的sscanf函数(其中格式控制字符的使用方法和scanf一致,%d读十进制整数,%x读16进制整数)。
例如:
char s[] = "92283976 73b1c080 1e448b0 bd44dae6e";
int a, b, c, d;
sscanf(s, "%d%x%x%x", &a, &b, &c, &d);
前提是要保证字符串格式和格式控制符一致,否则后果不确定。
另外,这里bd44dae6e在32位平台上超过int范围,如果要正确读入的话,需要使用long long,对应格式控制字符改用Lx或llx。
====
[原创回答团]
参考资料:原创
本回答被提问者采纳C语言:怎样把字符1变成数字1?
1、打开电脑上的code blocks编辑器,点击新建file菜单,创建一个新的文件。
2、使用\\n转义序列打印信息,按照如图所示代码更改,然后保存,build,Run。打印输出如下,打印出的信息换行输出。学会使用\\n换行输出。
3、使用\\t制表符输出信息,在代码中输入 printf("\\n制表符的形式\\t你学会了吗!");打印效果如下:在\\t的位置会输出制表符。
4、使用\\a调出计算机铃声。运行程序的时候你会听到计算机响铃。转义序列单引号,双引号,反斜杠的使用方法。
5、转换字符,设定输出的形式,整型,浮点型,字符,字符串。
6、打印数字的不同类型,%d整数,%f浮点数, %c字符型, %a字符串。可以在转换字符%和f之间加上点和数字,代表打印浮点数值的小数位数。每一种转换字符对应一种输出形式。
参考技术A 直接使用字符1减去字符0即可,如:'1'-'0'这样做可行是因为字符0到字符9在ascii编码时是连续的,字符0的ascii值是48,字符1的ascii值是49,其他数字字符依次往后排,而ascii值实际上就是char型整数,所以可以用两个字符相减得到结果。 参考技术B 范例 /* 将字符串a 与字符串b转换成数字后相加*/
#include<stdlib.h>
main()
char *a=”-100.23”;
char *b=”200e-2”;
float c;
c=atof(a)+atof(b);
printf(“c=%.2f\n”,c);
执行 c=-98.23 参考技术C char ch1='1';char ch2='2';int i,j;i=(int)ch1-48;j=(int)ch2-48; 参考技术D '1'-48=1 因'1'的ASC码是49
以上是关于C语言怎么把字符串转换为可以用于计算的数字的主要内容,如果未能解决你的问题,请参考以下文章