2017-05-09 187 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
相关问题