C語言中字符串如何轉換為二進制、八進制、十進制、十六進制


在C語言某個程序當中需要把文本16進制轉換成對應的16進制數,比如字符串"0x1a"轉換成10進制的26,可以用以下函數來實現
相關函數: atof, atoi, atol, strtod, strtoul
表頭文件: #include <stdlib.h>
定義函數: long int strtol(const char *nptr, char **endptr, int base);
函數的解釋說明
這個函數會將參數nptr字符串根據參數base來轉換成長整型數。參數base范圍從2至36,或0。參數base代表采的進制方式,如base值為10則采用10進制,若base值為16則采用16進制等。當base值為0時則是采用10進制做轉換,但遇到如’0x’前置字符則會使用16進制做轉換、遇到’0’前置字符而不是’0x’的時候會使用8進制做轉換。一開始strtol()會掃描參數nptr字符串,跳過前面的空格字符,直到遇上數字或正負符號才開始做轉換,再遇到非數字或字符串結束時('\0')結束轉換,並將結果返回。若參數endptr不為NULL,則會將遇到不合條件而終止的nptr中的字符指針由endptr返回;若參數endptr為NULL,則會不返回非法字符串。
strtol是atoi的增強版
主要體現在這幾方面:
1.不僅可以識別十進制整數,還可以識別其它進制的整數,取決於base參數,比如strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。
2.endptr是一個傳出參數,函數返回時指向后面未被識別的第一個字符。例如char *pos; strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串開頭沒有可識別的整數,例如char *pos; strtol("ABCabc", &pos, 10);,則strtol返回0,pos指向字符串開頭,可以據此判斷這種出錯的情況,而這是atoi處理不了的。
3.如果字符串中的整數值超出long int的表示范圍(上溢或下溢),則strtol返回它所能表示的最大(或最小)整數,並設置errno為ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff並設置errno為ERANGE


將字符串a, b, c 分別采用10, 2, 16進制轉換成數字
------------------------------------------------
#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中的每個字符在內存中都占有一個字節(1 Byte = 8 bits)的空間,將若干個(3個)字節中的內容轉換成二進制的數字(字符串"100"去掉雙引號后是一個二進制的數字100),讓后將該二進制數字以十進制的形式4打印出來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM