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() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-03

有两种方式,一种是使用常用标准函数库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 表示满足该条件的被过滤掉,不会向目标参数中写入值。

第2个回答  2010-08-13
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个回答  2010-08-13
sscanf
第4个回答  推荐于2017-09-08
用标准库中的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。
====
[原创回答团]

参考资料:原创

本回答被提问者采纳
相似回答