C语言中字符串如何转换为二进制、八进制、十进制、十六进制
在C語(yǔ)言某個(gè)程序當(dāng)中需要把文本16進(jìn)制轉(zhuǎn)換成對(duì)應(yīng)的16進(jìn)制數(shù),比如字符串"0x1a"轉(zhuǎn)換成10進(jìn)制的26,可以用以下函數(shù)來(lái)實(shí)現(xiàn)
相關(guān)函數(shù): atof, atoi, atol, strtod, strtoul
表頭文件: #include <stdlib.h>
定義函數(shù): long int strtol(const char *nptr, char **endptr, int base);
函數(shù)的解釋說(shuō)明
這個(gè)函數(shù)會(huì)將參數(shù)nptr字符串根據(jù)參數(shù)base來(lái)轉(zhuǎn)換成長(zhǎng)整型數(shù)。參數(shù)base范圍從2至36,或0。參數(shù)base代表采的進(jìn)制方式,如base值為10則采用10進(jìn)制,若base值為16則采用16進(jìn)制等。當(dāng)base值為0時(shí)則是采用10進(jìn)制做轉(zhuǎn)換,但遇到如’0x’前置字符則會(huì)使用16進(jìn)制做轉(zhuǎn)換、遇到’0’前置字符而不是’0x’的時(shí)候會(huì)使用8進(jìn)制做轉(zhuǎn)換。一開(kāi)始strtol()會(huì)掃描參數(shù)nptr字符串,跳過(guò)前面的空格字符,直到遇上數(shù)字或正負(fù)符號(hào)才開(kāi)始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時(shí)('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。若參數(shù)endptr不為NULL,則會(huì)將遇到不合條件而終止的nptr中的字符指針由endptr返回;若參數(shù)endptr為NULL,則會(huì)不返回非法字符串。
strtol是atoi的增強(qiáng)版
主要體現(xiàn)在這幾方面:
1.不僅可以識(shí)別十進(jìn)制整數(shù),還可以識(shí)別其它進(jìn)制的整數(shù),取決于base參數(shù),比如strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。
2.endptr是一個(gè)傳出參數(shù),函數(shù)返回時(shí)指向后面未被識(shí)別的第一個(gè)字符。例如char *pos; strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串開(kāi)頭沒(méi)有可識(shí)別的整數(shù),例如char *pos; strtol("ABCabc", &pos, 10);,則strtol返回0,pos指向字符串開(kāi)頭,可以據(jù)此判斷這種出錯(cuò)的情況,而這是atoi處理不了的。
3.如果字符串中的整數(shù)值超出long int的表示范圍(上溢或下溢),則strtol返回它所能表示的最大(或最小)整數(shù),并設(shè)置errno為ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并設(shè)置errno為ERANGE
將字符串a(chǎn), b, c 分別采用10, 2, 16進(jìn)制轉(zhuǎn)換成數(shù)字
------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
int main()
{
?char a[] = "100";
?char b[] = "100";
?char c[] = "0x11";
?int x, y, z;
?x = strtol( a, NULL, 10 );
?y = strtol( b, NULL, 2 );
?z = strtol( c, NULL, 16 );
?printf( "x = %d\n", x );
?printf( "y = %d\n", y );
?printf( "z = %d\n", z );
}
輸出:x = 100
? ? ? y = 4
? ? ? z = 17
? 舉例說(shuō)明:字符串b中的每個(gè)字符在內(nèi)存中都占有一個(gè)字節(jié)(1 Byte = 8 bits)的空間,將若干個(gè)(3個(gè))字節(jié)中的內(nèi)容轉(zhuǎn)換成二進(jìn)制的數(shù)字(字符串"100"去掉雙引號(hào)后是一個(gè)二進(jìn)制的數(shù)字100),讓后將該二進(jìn)制數(shù)字以十進(jìn)制的形式4打印出來(lái)
轉(zhuǎn)載于:https://www.cnblogs.com/dyllove98/p/3153509.html
總結(jié)
以上是生活随笔為你收集整理的C语言中字符串如何转换为二进制、八进制、十进制、十六进制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 这就是搜索引擎:核心技术详解
- 下一篇: 『MCSE 2008系统管理视频』Uni