字符串转不同进制数学
大约 1 分钟
strtol()函数字符串转换成十进制、十六进制 、二进制、 八进制 long类型
#include <stdlib.h>
long int strtol (const char* str, char** endptr, int base);
str
为要转换的字符串,endstr
为第一个不能转换的字符的指针,base
为字符串 str
所采用的进制。
参数 base
范围从2 至36,或0。
strtol()
会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(’\0’)结束转换,并将结果返回。
#include <iostream>
#include <string>
int main() {
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd;
long int li1, li2, li3, li4;
li1 = strtol(szNumbers, &pEnd, 10); //用十进制 解析2001
li2 = strtol(pEnd, &pEnd, 16); //用十六进制 解析60c0c0
li3 = strtol(pEnd, &pEnd, 2); //用二进制 解析-1101110100110100100000
li4 = strtol(pEnd, NULL, 0); //自动判断 解析0x6fffff
printf("转换成10进制: %ld、%ld、%ld、%ld\n", li1, li2, li3, li4); //转换成10进制: 2001、6340800、-3624224、7340031
return 0;
}
#获取8进制参数
#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <cstdio>
//#include <cstring>
//./my_mkdir new_directory 0777 #依然会受到umask的影响
int main(int argc, char** argv) {
if(argc != 3) {
std::cout << "Args Error!" << std::endl;
return -1;
}
mode_t mode = strtol(argv[2], nullptr, 8); //字符串转8进制长整型数字
int ret = mkdir(argv[1], mode);
if(-1 == ret) {
//std::cout << "mkdir :" << strerror(ret) << std::endl;
perror("mkdir");
}
}
atoi
这个只能字符串转十进制