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 表示满足该条件的被过滤掉,不会向目标参数中写入值。

参考技术B 92283976 73b1c080 1e448b0 bd44dae6e 其实都是16进制的,那么就往16进制方面想。

只说思路:
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语言怎么把字符串转换为可以用于计算的数字的主要内容,如果未能解决你的问题,请参考以下文章

C语言字符转数字

C语言中如何把浮点型转换为字符型

C语言如何把一个字符串转换成数字

C语言:怎样把字符1变成数字1?

C语言如何将64位整数转字符串

c语言中实现输入一个数字字符,然后转换成整数数字输出.怎么做?