C语言怎么把字符串转换为可以用于计算的数字 C语言如何把一个字符串转换成数字?

C\u8bed\u8a00\u600e\u4e48\u628a\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u53ef\u4ee5\u7528\u4e8e\u8ba1\u7b97\u7684\u6570\u5b57\uff1f

\uff081\uff09\u4f7f\u7528\u5e38\u7528\u6807\u51c6\u51fd\u6570\u5e93stdlib\u5f53\u4e2d\u7684\u5b57\u7b26\u4e32\u8f6c\u6362\u51fd\u6570\uff0c\u53ef\u4ee5\u628a\u5404\u79cd\u7c7b\u578b\u7684\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u76f8\u5e94\u7c7b\u578b\u7684\u6570\u5b57\u3002
\uff082\uff09\u4f7f\u7528\u8f93\u5165\u8f93\u51fa\u6807\u51c6\u51fd\u6570\u5e93stdio\u5f53\u4e2d\u7684sscanf\u51fd\u6570\u3002
\u7528\u6807\u51c6\u5e93\u4e2d\u7684sscanf\u51fd\u6570\uff08\u5176\u4e2d\u683c\u5f0f\u63a7\u5236\u5b57\u7b26\u7684\u4f7f\u7528\u65b9\u6cd5\u548cscanf\u4e00\u81f4\uff0c%d\u8bfb\u5341\u8fdb\u5236\u6574\u6570\uff0c%x\u8bfb16\u8fdb\u5236\u6574\u6570\uff09\u3002\u4f8b\u5982\uff1achar s[] = {"92283976 73b1c080 1e448b0 bd44dae6e"};int a, b, c, d;sscanf(s, "%d%x%x%x", &a, &b, &c, &d);\u524d\u63d0\u662f\u8981\u4fdd\u8bc1\u5b57\u7b26\u4e32\u683c\u5f0f\u548c\u683c\u5f0f\u63a7\u5236\u7b26\u4e00\u81f4\uff0c\u5426\u5219\u540e\u679c\u4e0d\u786e\u5b9a\u3002\u53e6\u5916\uff0c\u8fd9\u91ccbd44dae6e\u572832\u4f4d\u5e73\u53f0\u4e0a\u8d85\u8fc7int\u8303\u56f4\uff0c\u5982\u679c\u8981\u6b63\u786e\u8bfb\u5165\u7684\u8bdd\uff0c\u9700\u8981\u4f7f\u7528long long\uff0c\u5bf9\u5e94\u683c\u5f0f\u63a7\u5236\u5b57\u7b26\u6539\u7528Lx\u6216llx\u3002
atof() \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u53cc\u7cbe\u5ea6\u6d6e\u70b9\u578b\u503c\uff1batoi() \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u6574\u578b\u503c\uff1batol() \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u957f\u6574\u578b\u503c\uff1bstrtod() \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u53cc\u7cbe\u5ea6\u6d6e\u70b9\u578b\u503c\uff0c\u5e76\u62a5\u544a\u4e0d\u80fd\u88ab\u8f6c\u6362\u7684\u6240\u6709\u5269\u4f59\u6570\u5b57 \uff1bstrtol() \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u957f\u6574\u503c\uff0c\u5e76\u62a5\u544a\u4e0d\u80fd\u88ab\u8f6c\u6362\u7684\u6240\u6709\u5269\u4f59\u6570\u5b57 \uff1bstrtoul() \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u65e0\u7b26\u53f7\u957f\u6574\u578b\u503c\uff0c\u5e76\u62a5\u544a\u4e0d\u80fd\u88ab\u8f6c\u6362\u7684\u6240\u6709\u5269\u4f59\u6570\u5b57\u3002

C\u8bed\u8a00\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528atoi\u51fd\u6570\u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u6570\u5b57\uff0c\u5982atoi("123")\u53ef\u4ee5\u5f97\u5230\u6570\u5b57123\u3002
atoi (\u8868\u793a ascii to integer)\u662f\u628a\u5b57\u7b26\u4e32\u8f6c\u6362\u6210\u6574\u578b\u6570\u7684\u4e00\u4e2a\u51fd\u6570\uff0c\u5e94\u7528\u5728\u8ba1\u7b97\u673a\u7a0b\u5e8f\u548c\u529e\u516c\u8f6f\u4ef6\u4e2d\u3002int atoi(const char *nptr) \u51fd\u6570\u4f1a\u626b\u63cf\u53c2\u6570 nptr\u5b57\u7b26\u4e32\uff0c\u4f1a\u8df3\u8fc7\u524d\u9762\u7684\u7a7a\u767d\u5b57\u7b26\uff08\u4f8b\u5982\u7a7a\u683c\uff0ctab\u7f29\u8fdb\uff09\u7b49\u3002
\u5982\u679c nptr\u4e0d\u80fd\u8f6c\u6362\u6210 int \u6216\u8005 nptr\u4e3a\u7a7a\u5b57\u7b26\u4e32\uff0c\u90a3\u4e48\u5c06\u8fd4\u56de0\u3002\u7279\u522b\u6ce8\u610f\uff0c\u8be5\u51fd\u6570\u8981\u6c42\u88ab\u8f6c\u6362\u7684\u5b57\u7b26\u4e32\u662f\u6309\u5341\u8fdb\u5236\u6570\u7406\u89e3\u7684\u3002atoi\u8f93\u5165\u7684\u5b57\u7b26\u4e32\u5bf9\u5e94\u6570\u5b57\u5b58\u5728\u5927\u5c0f\u9650\u5236\uff08\u4e0eint\u7c7b\u578b\u5927\u5c0f\u6709\u5173\uff09\uff0c\u82e5\u5176\u8fc7\u5927\u53ef\u80fd\u62a5\u9519-1\u3002

\u6269\u5c55\u8d44\u6599\uff1a
C\u8bed\u8a00\u4e2d\u6570\u5b57\u8f6c\u5316\u4e3a\u5b57\u7b26\u4e32\u7684\u65b9\u6848\uff1a
\u4f7f\u7528sprintf\u51fd\u6570\u6765\u5b9e\u73b0\uff0c\u5982sprintf("%d", 123)\u53ef\u4ee5\u5f97\u5230\u5b57\u7b26\u4e32"123"\u3002
sprintf\u6307\u7684\u662f\u5b57\u7b26\u4e32\u683c\u5f0f\u5316\u547d\u4ee4\uff0c\u4e3b\u8981\u529f\u80fd\u662f\u628a\u683c\u5f0f\u5316\u7684\u6570\u636e\u5199\u5165\u67d0\u4e2a\u5b57\u7b26\u4e32\u4e2d\u3002sprintf \u662f\u4e2a\u53d8\u53c2\u51fd\u6570\u3002\u4f7f\u7528sprintf \u5bf9\u4e8e\u5199\u5165buffer\u7684\u5b57\u7b26\u6570\u662f\u6ca1\u6709\u9650\u5236\u7684\uff0c\u8fd9\u5c31\u5b58\u5728\u4e86buffer\u6ea2\u51fa\u7684\u53ef\u80fd\u6027\u3002\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u8003\u8651\u4f7f\u7528 snprintf\u51fd\u6570\uff0c\u8be5\u51fd\u6570\u53ef\u5bf9\u5199\u5165\u5b57\u7b26\u6570\u505a\u51fa\u9650\u5236\u3002
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-atoi

(1)使用常用标准函数库stdlib当中的字符串转换函数,可以把各种类型的字符串转换为相应类型的数字。

(2)使用输入输出标准函数库stdio当中的sscanf函数。



有两种方式,一种是使用常用标准函数库stdlib当中的字符串转换函数,可以把各种类型的字符串转换为相应类型的数字;另外一种是使用输入输出标准函数库stdio当中的sscanf函数。

  1. 方法一:

    下列函数可以将字符串转换为数字:
    ------------------------------------------------------------------------
        函数名    作  用
    ------------------------------------------------------------------------
     atof()     将字符串转换为双精度浮点型值
     atoi()     将字符串转换为整型值
     atol()     将字符串转换为长整型值
     strtod()   将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
     strtol()   将字符串转换为长整值,并报告不能被转换的所有剩余数字
     strtoul()  将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
    ------------------------------------------------------------------------ 

  2. 方法二:

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



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)次方,类推。

希望能帮到你。

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。
====
[原创回答团]

  • 鐢C璇█鎬庝箞鏍锋妸鐢ㄦ埛杈撳叆鐨瀛楃涓茶浆鍖栨垚鍦ㄦ簮绋嬪簭涓彲鎵ц鐨勮〃杈惧紡?_鐧惧害...
    绛旓細#include <string.h> int test(const char *str) { int length, i = 0, j = 0; char *pl, *pr, *tmp, sign = 0; tmp = str; length = strlen(str); for(i = 0; i < length; i++){ char c = *(str+i); if(c == '+'|| c == '-' || c == '*' || c == '/' ...
  • C璇█鎬庝箞鎶婂瓧绗︿覆杞崲涓哄彲浠鐢ㄤ簬璁$畻鐨勬暟瀛
    绛旓細锛1锛変娇鐢ㄥ父鐢ㄦ爣鍑嗗嚱鏁板簱stdlib褰撲腑鐨勫瓧绗︿覆杞崲鍑芥暟锛屽彲浠ユ妸鍚勭绫诲瀷鐨勫瓧绗︿覆杞崲涓虹浉搴旂被鍨嬬殑鏁板瓧銆傦紙2锛変娇鐢ㄨ緭鍏ヨ緭鍑烘爣鍑嗗嚱鏁板簱stdio褰撲腑鐨剆scanf鍑芥暟銆傜敤鏍囧噯搴撲腑鐨剆scanf鍑芥暟锛堝叾涓牸寮忔帶鍒跺瓧绗︾殑浣跨敤鏂规硶鍜宻canf涓鑷达紝%d璇诲崄杩涘埗鏁存暟锛%x璇16杩涘埗鏁存暟锛夈備緥濡傦細char s[] = {"92283976 73b1c080 1e4...
  • c璇█濡備綍鎶杈撳叆鐨瀛楃涓杩涜杞崲
    绛旓細1銆佺涓鏂板缓涓涓猵roject銆2銆佽緭鍏ュご鏂囦欢#include銆3銆佽緭鍏ヤ富鍑芥暟int main()銆4銆佹帴鐫杈撳叆鍑芥暟涓讳綋閮ㄥ垎锛屽彉閲忓繀椤诲厛瀹氫箟绫诲瀷鍐嶄娇鐢ㄣ5銆佽緭鍏ュ彉閲忕殑鍊硷紝娉ㄦ剰杩欓噷scanf閲屽彉閲忓悕鍓嶅繀椤诲姞&锛岀粨灏惧繀椤诲姞鍒嗗彿銆6銆佽緭鍏ュ嚱鏁颁富浣撻儴鍒嗗苟杈撳嚭銆7銆佺偣鍑荤紪璇戞寜閽紝鏌ョ湅鏄惁鏈塭rror銆8銆佹帴鐫鐩存帴杩愯锛屽姝や究杞崲浜嗐
  • c璇█鎬庝箞灏嗗瓧绗︿覆杞崲鎴瀵瑰簲鍑芥暟
    绛旓細c璇█鏄病娉曟妸瀛楃涓茶浆鎹㈡垚瀵瑰簲鍑芥暟鐨锛宑璇█鏄粨鏋勫寲璇█锛岀▼搴忔庝箞鎵ц鍦ㄧ紪璇戞椂宸茬粡纭畾锛屾病娉曞儚c#涔嬬被鐨勬墭绠′唬鐮侀珮绾ц瑷鑳藉鍔ㄦ佺粦瀹氭垨鑰呭彨鍚庢湡缁戝畾銆傚洜涓烘墭绠′唬鐮佹湁杩愯鏃跺幓閫夋嫨鎵ц锛岃宑璇█缂栬瘧鍚庣殑鍙墽琛屾枃浠朵负鎿嶄綔绯荤粺鐩存帴璋冪敤浜嗭紝鎵浠ユ病娉曞姩鎬佺粦瀹氥
  • C璇█涓 瀛楃涓插浣曡浆涓鏁村瀷鏁板
    绛旓細鍦–璇█涓皢瀛楃涓茶浆鍖栨垚鏁村瀷鏈変袱绉嶆柟娉曘1 鐢╝toi鍑芥暟銆俛toi鐨勫姛鑳藉氨鏄皢瀛楃涓茶浆涓烘暣鍨嬪苟杩斿洖銆傚叾澹版槑涓 int atoi(char *str);姣斿atoi("1234");浼氳繑鍥炴暣鍨1234銆傝璋冪敤atoi,闇瑕佸紩鐢ㄥご鏂囦欢stdio.h 2 鐢╯scanf銆俿scanf涓庢爣鍑嗘牸寮忓寲杈撳叆鍑芥暟scanf绫讳技锛屼笉杩囨簮骞堕潪鏄爣鍑嗚緭鍏ワ紝鑰屾槸瀛楃涓层傜敤sscanf...
  • 鐢C璇█鎬庝箞鏍锋妸鐢ㄦ埛杈撳叆鐨瀛楃涓茶浆鍖栨垚鍦ㄦ簮绋嬪簭涓彲鎵ц鐨勮〃杈惧紡?_鐧惧害...
    绛旓細include <stdio.h>#include <stdlib.h>#include <string.h>int test(const char *str){ int length, i = 0, j = 0; char *pl, *pr, *tmp, sign = 0; tmp = str; length = strlen(str); for(i = 0; i < length; i++){ char c = *(str+i); if...
  • c璇█涓瓧绗︿覆鑳藉惁杞负浠g爜鎵ц?鎴栬呮湁浠涔堟浛浠e姙娉?
    绛旓細鍦ㄥ惊鐜腑鏄笉鍙互鐢瀹忓畾涔夌殑鏂规硶鏉ュ疄鐜扮殑锛屽洜涓哄畯鏄湪缂栬瘧鍓嶆浛鎹紝涓嶄細鏍规嵁浠g爜閫昏緫鏉ャ傜敤鏁扮粍鑲畾鏄渶鍚堢悊鐨勶紝澶氫釜鍙橀噺鐨勬柟娉曪紝鏈変竴绉嶄笉瀹夊叏鐨勬柟娉曟潵鍋氾紝灏辨槸浣跨敤閲庢寚閽堛傚墠鎻愶細鍙橀噺杩炵画瀹氫箟锛岃繖鏍蜂粬浠湪鍐呭瓨涓殑鍦板潃灏辨槸杩炵画鐨勩備箣鍚庣敤涓涓猧nt鎸囬拡锛歩nt *pi = &data1;pi++ ;//灏辨寚鍚慸ata2浜嗕絾...
  • VS2010涓,鍦C璇█涓,灏嗗瓧绗︿覆,杞崲鎴愬彲浠杩愮畻鐨勮繍绠楀紡
    绛旓細return 0;//闄ゆ暟涓0寮傚父 } return (n1/n2);} default:return 0;} return 0;//杈撳叆涓嶆纭垯杩斿洖0 } void main(){ int result;char str[50];scanf("%s",str);//鑾峰緱琛ㄨ揪寮1231+2,鏁板瓧闀垮害鍙彉锛屼絾鏄腑闂翠笉鑳芥湁绌烘牸 int i;char ch;int iLen = strlen(str);//姹瀛楃涓闀垮害 int n1 =...
  • c璇█涓浣曞皢瀛楃涓茶浆鍖栨垚鏁存暟鍨嬪苟杈撳嚭?
    绛旓細c璇█涓锛鍙互浣跨敤atoi()鍑芥暟灏嗗瓧绗︿覆杞寲鎴鏁存暟鍨嬪苟杈撳嚭銆俛toi (琛ㄧず ascii to integer)鏄鎶婂瓧绗︿覆杞崲鎴鏁村瀷鏁扮殑涓涓嚱鏁帮紝搴旂敤鍦ㄨ绠楁満绋嬪簭鍜屽姙鍏蒋浠朵腑銆俰nt atoi(const char *nptr) 鍑芥暟浼氭壂鎻忓弬鏁 nptr瀛楃涓诧紝浼氳烦杩囧墠闈㈢殑绌虹櫧瀛楃锛堜緥濡傜┖鏍硷紝tab缂╄繘锛夌瓑銆傚鏋 nptr涓嶈兘杞崲鎴 int 鎴栬 nptr...
  • 鍚湁瀛楁瘝瀛楃涓茶浆鎹负鏁存暟
    绛旓細鍦C璇█涓锛屾兂瑕灏嗗瓧绗︿覆杞崲涓鏁存暟锛屼綘鍙互鍊熷姪stdlib.h搴撲腑鐨刟toi()鍑芥暟銆傝繖涓嚱鏁版帴鍙椾竴涓瓧绗︿覆浣滀负杈撳叆锛屽叾闀垮害涓嶈兘瓒呰繃10锛岀劧鍚庡畠浼氬皢瀛楃涓蹭腑鐨勫瓧绗﹀簭鍒楅嗗簭澶勭悊锛屼互鏁存暟褰㈠紡杩斿洖銆傚瓧绗︿覆鐨勫疄闄呴暱搴﹀彲浠ラ氳繃璋冪敤strlen()鍑芥暟鏉ヨ幏鍙栥傜劧鑰岋紝濡傛灉瀛楃涓叉棤娉曟纭В鏋愪负鏁存暟锛宎toi()鍑芥暟浼氳繑鍥0銆傚浜...
  • 扩展阅读:截取字符串的三种方法 ... 字符串去重的5种方法 ... c语言符号意义大全 ... c语言整型转字符串 ... c语言int转换为字符串 ... c++如何逐行读取字符串 ... c++如何连接两个字符串 ... c #根据符号分割字符串 ... c语言把整数变为字符串 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网