C语言中字符串如何转换为二进制、八进制、十进制、十六进制
在C語言某個程序當(dāng)中需要把文本16進制轉(zhuǎn)換成對應(yīng)的16進制數(shù),比如字符串"0x1a"轉(zhuǎn)換成10進制的26,可以用以下函數(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ù)的解釋說明
這個函數(shù)會將參數(shù)nptr字符串根據(jù)參數(shù)base來轉(zhuǎn)換成長整型數(shù)。參數(shù)base范圍從2至36,或0。參數(shù)base代表采的進制方式,如base值為10則采用10進制,若base值為16則采用16進制等。當(dāng)base值為0時則是采用10進制做轉(zhuǎn)換,但遇到如’0x’前置字符則會使用16進制做轉(zhuǎn)換、遇到’0’前置字符而不是’0x’的時候會使用8進制做轉(zhuǎn)換。一開始strtol()會掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。若參數(shù)endptr不為NULL,則會將遇到不合條件而終止的nptr中的字符指針由endptr返回;若參數(shù)endptr為NULL,則會不返回非法字符串。
strtol是atoi的增強版
主要體現(xiàn)在這幾方面:
1.不僅可以識別十進制整數(shù),還可以識別其它進制的整數(shù),取決于base參數(shù),比如strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。
2.endptr是一個傳出參數(shù),函數(shù)返回時指向后面未被識別的第一個字符。例如char *pos; strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串開頭沒有可識別的整數(shù),例如char *pos; strtol("ABCabc", &pos, 10);,則strtol返回0,pos指向字符串開頭,可以據(jù)此判斷這種出錯的情況,而這是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進制轉(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
? 舉例說明:字符串b中的每個字符在內(nèi)存中都占有一個字節(jié)(1 Byte = 8 bits)的空間,將若干個(3個)字節(jié)中的內(nèi)容轉(zhuǎn)換成二進制的數(shù)字(字符串"100"去掉雙引號后是一個二進制的數(shù)字100),讓后將該二進制數(shù)字以十進制的形式4打印出來
轉(zhuǎn)載于:https://www.cnblogs.com/dyllove98/p/3153509.html
總結(jié)
以上是生活随笔為你收集整理的C语言中字符串如何转换为二进制、八进制、十进制、十六进制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这就是搜索引擎:核心技术详解
- 下一篇: GDB技巧:使用checkpoint解决