中易网

C语言怎么把字符串转换为可以用于计算的数字

答案:5  悬赏:70  
解决时间 2021-01-11 23:29
  • 提问者网友:一抹荒凉废墟
  • 2021-01-11 06:53
C语言怎么把字符串转换为可以用于计算的数字
最佳答案
  • 二级知识专家网友:醉吻情书
  • 2021-01-11 07:38
(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() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。
全部回答
  • 1楼网友:执傲
  • 2021-01-11 12:16
sscanf
  • 2楼网友:你哪知我潦倒为你
  • 2021-01-11 12:00
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)次方,类推。
希望能帮到你。
  • 3楼网友:玩世
  • 2021-01-11 10:25
用标准库中的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。
====
[原创回答团]

参考资料:原创

  • 4楼网友:鱼忧
  • 2021-01-11 08:57

有两种方式,一种是使用常用标准函数库stdlib当中的字符串转换函数,可以把各种类型的字符串转换为相应类型的数字;另外一种是使用输入输出标准函数库stdio当中的sscanf函数。
方法一:
下列函数可以将字符串转换为数字:
------------------------------------------------------------------------
    函数名    作  用
------------------------------------------------------------------------
 atof()     将字符串转换为双精度浮点型值
 atoi()     将字符串转换为整型值
 atol()     将字符串转换为长整型值
 strtod()   将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
 strtol()   将字符串转换为长整值,并报告不能被转换的所有剩余数字
 strtoul()  将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
------------------------------------------------------------------------ 
方法二:
sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
第二个参数可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ' ' | ' ' | ' ' | 非%符号}
注:
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 表示满足该条件的被过滤掉,不会向目标参数中写入值。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息