linux c中自编的一个进制(2~36进制)转换函数(strtol库函数自带,ltostr自编)
2016-01-04 21:35
489 查看
strtol的用法容易从网上查到,大致用法是strtol(需转换为10进制的字符串,剩余字符(这里填NULL),进制),
我将下列程式编译成的可执行文件命名为numbersystem.exe,那么就可以使用./numbersystem.exe -d <需转换为10进制的字符串> <进制>来直接使用库函数strtol,至于自编的ltostr(10十进制字符串, 剩余字符(这里填NULL),需转换成的进制)可由./numbersystem.exe -r <10十进制字符串> <需转换成的进制>来实现。为了防止ltostr的实现开过大的数组,我们利用链表来保存数据。
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int main(int argc, char *argv[])
{
struct lstr
{
int c;
struct lstr *ptr;
};
struct lstr *list;
struct lstr *list_tmp;
struct lstr *list_free;
long dec;
int mod;
int base;
if(argc != 4 || (strcmp(argv[1], "-d") != 0 && strcmp(argv[1], "-r") != 0))
{
printf("Usage: numbersystem.exe <-d> <number> <base>\nor\nUsage: numbersystem.exe <-r> <number> <base>\n");
return -1;
}
if(strcmp(argv[1], "-d") == 0)
printf("%d\n", strtol(argv[2], NULL, atoi(argv[3])));
else
{
dec = atoi(argv[2]);
base = atoi(argv[3]);
list_tmp = NULL;
while(dec > 0)
{
list = (struct lstr *)malloc(sizeof(struct lstr));
mod = dec%base;
if(mod >= 0 && mod <= 9)
list->c = mod;
else
{
list->c = mod - 10 + (int)'a';
}
list->ptr = list_tmp;
list_tmp = list;
dec /= base;
}
while(list_tmp != NULL)
{
if(list_tmp->c >= 0 && list_tmp->c <= 9)
printf("%d", list_tmp->c);
else
printf("%c", (char)list_tmp->c);
list_free = list_tmp;
list_tmp = list_tmp->ptr;
free(list_free);
}
printf("\n");
}
return 0;
}
我将下列程式编译成的可执行文件命名为numbersystem.exe,那么就可以使用./numbersystem.exe -d <需转换为10进制的字符串> <进制>来直接使用库函数strtol,至于自编的ltostr(10十进制字符串, 剩余字符(这里填NULL),需转换成的进制)可由./numbersystem.exe -r <10十进制字符串> <需转换成的进制>来实现。为了防止ltostr的实现开过大的数组,我们利用链表来保存数据。
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int main(int argc, char *argv[])
{
struct lstr
{
int c;
struct lstr *ptr;
};
struct lstr *list;
struct lstr *list_tmp;
struct lstr *list_free;
long dec;
int mod;
int base;
if(argc != 4 || (strcmp(argv[1], "-d") != 0 && strcmp(argv[1], "-r") != 0))
{
printf("Usage: numbersystem.exe <-d> <number> <base>\nor\nUsage: numbersystem.exe <-r> <number> <base>\n");
return -1;
}
if(strcmp(argv[1], "-d") == 0)
printf("%d\n", strtol(argv[2], NULL, atoi(argv[3])));
else
{
dec = atoi(argv[2]);
base = atoi(argv[3]);
list_tmp = NULL;
while(dec > 0)
{
list = (struct lstr *)malloc(sizeof(struct lstr));
mod = dec%base;
if(mod >= 0 && mod <= 9)
list->c = mod;
else
{
list->c = mod - 10 + (int)'a';
}
list->ptr = list_tmp;
list_tmp = list;
dec /= base;
}
while(list_tmp != NULL)
{
if(list_tmp->c >= 0 && list_tmp->c <= 9)
printf("%d", list_tmp->c);
else
printf("%c", (char)list_tmp->c);
list_free = list_tmp;
list_tmp = list_tmp->ptr;
free(list_free);
}
printf("\n");
}
return 0;
}
相关文章推荐
- Linux socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- 如何组织构建多文件 C 语言程序(二)
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断