【问题标题】:How to convert a numeric string starting with 0 to an octal number如何将0开头的数字字符串转换为八进制数
【发布时间】:2017-05-07 06:57:45
【问题描述】:

我正在尝试这样做:

void main(int argc, char *argv[]){
int mode,f;

mode = atoi(argv[2]);

if((f = open("fichero.txt",O_CREAT, mode))==-1){    
    perror("Error");
    exit(1);
}

}

但是,当我引入像 0664 这样的数字时,mode 等于 664。如何保持前导零?

【问题讨论】:

  • 使用strtol(argv[2], NULL, 8);

标签: c atoi string-conversion


【解决方案1】:

atoi 函数假定字符串是数字的十进制表示。如果您想从不同的基础转换,请使用strtol

mode = strtol(argv[2], NULL, 0);

第三个参数指定基数。如果该值为0,则以0x开头的字符串将视为十六进制,以0开头的字符串将视为八进制,否则将视为十进制。

如果您希望字符串始终是八进制表示,则将基数设置为 8。

mode = strtol(argv[2], NULL, 8);

【讨论】:

  • 第三个参数在这里特别重要,因为数字模式的常规表示是八进制,无论是否有前导零。将数字模式字符串转换为以十进制表示可能会产生意想不到的结果。
  • mode=strtol(argv[2], NULL, 8) 和 mode=strtol(argv[2], NULL, 0) 都使数字变为十进制,所以如果我引入 0664 他们设置我的模式为 436。我该如何解决这个问题?
  • @EduardoRamos 我刚刚对此进行了测试,它工作正常。你是如何检查价值的?
  • 是的,它确实有效。 printf() 愚弄了我。非常感谢!
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 2021-04-22
  • 2013-09-19
相关资源
最近更新 更多