您的位置:首页 > 运维架构 > Linux

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux c语言