关于itoa()函数的实现,想和大家轻松的聊聊,我只是在15楼把自己知道的一个比较新的实现又发上来了,附加了一点自己的想法,没太大改变
今天突然看到一篇关于itoa()函数实现的文章,很有意思,好像itoa() 不是ANSI C标准的函数,man 一下itoa,果然找不到
这是一个把整数转为文字列的函数,比如itoa(10, 8)
意思就是按8进制转换10,变成12
据说itoa()早期的实现是出现在google group里
是一个叫Robert Jan Schaper 的洋人写的,如下
程序代码:
char* itoa(int val, int base){ static char buf[32] = {0}; int i = 30; for(; val && i ; --i, val /= base) buf[i] = "0123456789abcdef"[val % base]; return &buf[i+1]; }
乍看上去不明折什么意思,仔细想想觉得真的很聪明
buf[]里能存32个字符,正好是32位的int
这里的 i 还真让我想了一会儿, 原来下标最多31,返回的时候用的是return &buf[i+1]
所以i 最多可以从30开始......
在我这菜鸟看来,感觉
buf[i] = "0123456789abcdef"[val % base];
这句写的好漂亮啊(肯定有大鸟在说你看这菜鸟又在大惊小怪了)
一般在用这个函数的时候形式好像都是
char *itoa(int val, char *buffer, int radix)
上面的代码却用了static
但感觉还是多接受一个char * buffer参数比较好吧
大家有没有更多关于itoa()实现了, 拿出来晒晒吧!
[ 本帖最后由 madfrogme 于 2012-1-19 19:53 编辑 ]