2017-05-09 87 views
-3

在字符串庫函數strtol中,有第三個參數叫做'base'。手冊頁說這個基地應該在2到36之間,或者是一個特殊值0.在編寫代碼的時候,這個參數的意義是什麼?當我改變我的代碼中base的值時,我得到了不同的輸出。但是我沒有理解基礎變化和輸出差異背後的邏輯......簡單地說 - 我無法預測我的輸出變化的基數。c中strtol中參數'base'的意義是什麼?

+1

您是否嘗試過使用大量數字?在基數10中20與基數16中的20不同。 – Evert

+0

試試'strtol(「100」,NULL,2)' –

+0

然後你應該停止使用單個數字作爲測試用例。 – user3528438

回答

0

它是指數字系統,例如,十六進制,八進制,二進制 例如基地如果運行這個小程序

#include<stdio.h> 
int main() 
{ 
char str[]="0x16"; 
char str1[]="0100"; 
char str2[]="0111"; 
printf("%d,%d,%d",strtol(str,NULL,16),strtol(str1,NULL,8),strtol(str2,NULL,2)); 
} 

它給輸出爲:22,64,7 十六進制0x16被轉換爲十進制22 0100即100八進制轉換爲十進制64二進制 0111被轉換成7位十進制

+0

你沒有提到'0'作爲基礎 - 這是相當重要的。 –

1

base參數指示功能以治療輸入作爲具有特定的數字基。

例如,如果你的字符串包含表示爲十六進制的數字,你可以使用基地16如果是二進制的,你可以使用2 ...

非標準基地最多支持基數36,其中位數值爲10至35的「數字」使用字母「a」至「z」。

我們傾向於用作程序員的標準基礎是:2,8,10和16.如果使用base 0的特殊值,那麼函數將以與C編譯器相同的方式檢測數字基解釋的整數值在代碼:

  • 二進制(基數爲2)帶有前綴0b
  • 八進制(基數8)的前綴0
  • 十進制(基體10)沒有前綴,但必須以非零數字
  • 十六進制(基數爲16)的前綴爲0x
相關問題