`
weiyuhu
  • 浏览: 235884 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Linux下的itoa函数

阅读更多
上篇文章说到linux需要itoa函数,下面我就提供一份跨平台的itoa函数。

//return the length of result string. support only 10 radix for easy use and better performance

int my_itoa(int val, char* buf)

{

    const int radix = 10;

    char* p;
    int a;        //every digit
    int len;
    char* b;    //start of the digit char
    char temp;

    p = buf;

    if (val < 0)
    {
        *p++ = '-';
        val = 0 - val;
    }

    b = p;

    do
    {
        a = val % radix;
        val /= radix;

        *p++ = a + '0';

    } while (val > 0);

    len = (int)(p - buf);

    *p-- = 0;

    //swap
    do
    {
        temp = *p;
        *p = *b;
        *b = temp;
        --p;
        ++b;

    } while (b < p);

    return len;
}

这个函数会返回字符串的长度,在某些场合下会很有用。

我测试了一下,这个函数大概比MFC自带的itoa要快20%左右。

(因为不需要在循环体内判断if (a > 9)了,所以更快)。

2010/1/8 改进版:

//return the length of result string. support only 10 radix for easy use and better performance
int my_itoa(int val, char* buf)
{
    const unsigned int radix = 10;

    char* p;
    unsigned int a;        //every digit
    int len;
    char* b;            //start of the digit char
    char temp;
    unsigned int u;

    p = buf;

    if (val < 0)
    {
        *p++ = '-';
        val = 0 - val;
    }
    u = (unsigned int)val;

    b = p;

    do
    {
        a = u % radix;
        u /= radix;

        *p++ = a + '0';

    } while (u > 0);

    len = (int)(p - buf);

    *p-- = 0;

    //swap
    do
    {
        temp = *p;
        *p = *b;
        *b = temp;
        --p;
        ++b;

    } while (b < p);

    return len;
}

改进:将除法运算从有符号整数改为了无符号整数。典型速度从240毫秒左右,提高到了180毫秒左右。作为对比,MFC自带的itoa耗时是320毫秒左右。

(x86机器做无符号整数的除法要更快一些,汇编指令不同)

分享到:
评论

相关推荐

    linux C函数

    在Linux C编程中,字符串与数值之间的转换是非常常见的操作。本文将详细讲解几个重要的C语言库函数:`atoi`、`atof`、`itoa`以及`atol`,并探讨它们的工作原理和使用场景。 一、`atoi`函数 `atoi`全称为ASCII to ...

    linux下int转二进制字符串的方法_int转二进制字符串的方法_QT_linux_

    最后,"linux"环境下,虽然没有itoa函数,但我们可以使用其他库函数如snprintf或std::stringstream来替代。不过对于二进制转换,上述方法更为直接和高效。 在实际项目中,为了代码的可读性和通用性,你可能还需要...

    介绍linux 上的c函数库,里面比较详细介绍了函数库文件,对于linux编程来说很好嵌入式.zip

    本资料包主要针对Linux环境下的C函数库进行了详尽的阐述,对于想要深入学习Linux编程和嵌入式系统的单片机开发者来说,是一份极其宝贵的资源。 C函数库,也被称为标准库或C标准库,是C语言编程中预定义的一系列函数...

    linux操作系统,编程

    《第5章 Linux编程—字符测试与数据转换函数》会涉及C语言中的字符处理函数,如isalpha、isdigit,以及数据类型转换函数,如atoi、itoa等,这些函数在处理输入输出和格式化数据时非常有用。 《第6章 Linux编程—...

    linux下c字符串操作常用方法

    `itoa()`在标准库中未定义,但可以使用`sprintf()`或自定义函数来实现这个功能。 7. 反转字符串: 使用双指针法,一个指针从字符串开头向后移动,另一个从末尾向前移动,交换它们指向的字符。 示例代码如下: `...

    Linux c比较金额相等函数.pdf

    在这个场景下,我们关注的是如何编写函数来正确地比较两个金额是否相等或者满足特定的大小关系。下面将详细介绍几种常见的C语言表达式和函数,用于处理这种比较。 1. **条件测试表达式**: 在Linux shell脚本中,...

    SOCKET网络编程:Linux下实现聊天室.docx

    程序使用`time()`和`localtime()`获取当前时间,并自定义`itoa()`函数将整型时间转换为字符型字符串。 10. **字符串操作**:程序中的`strcat()`、`strcpy()`等函数是C语言中的字符串处理函数,用于字符串的复制和...

    几个Windows到Linux的代码移植问题

    概要:假设你有一些在Windows环境编写的代码,你想让它们在Linux环境下运行。代码的移植是一个很头疼的问题,本文介绍几个简单的方法,使你顺利将代码从Windows移植到Linux。  1、在Linux实现Win32 API之...

    十六进制与字符串转换

    在Linux环境下,有时可能需要处理二进制数据,这时十六进制字符串尤其有用。例如,你可以将二进制文件内容读取到一个字符数组,然后使用上述方法将其转换为十六进制字符串进行显示或存储。 为了更好地理解这些概念...

    软开面试总结.docx

    12. `int`转字符串和字符串转`int`:可以使用`std::stringstream`或者`itoa()`/`atoi()`等函数完成转换。`strcat()`, `strcpy()`, `strncpy()`, `memset()`, `memcpy()`都是C库中的字符串和内存操作函数。 13. 深...

    SHELL下ITOAN實現代码

    但在Shell脚本中,由于其语法特性,没有内置的itoa函数。因此,这个"itoan"实现可能是通过巧妙的字符串操作和循环来达到类似的效果。通常,这样的实现会涉及以下步骤: 1. **基数转换**:基数是指数制系统中的基础...

    C语言库函数源代码.doc-综合文档

    本文档对C语言库函数源代码进行了详细的介绍和分析,涵盖了atoi()和itoa()函数的实现、类型转换、强制类型转换、vi编辑器的使用等多方面的内容。 一、atoi()和itoa()函数 atoi()和itoa()函数是C语言库函数,用于将...

    ANSI《C标准库》P.J.plauger的著作;也就是我们经常调用的库函数接口

    在Linux系统中,这些函数的实现通常是以静态库的形式存在于/usr/lib目录下的libc.a文件。 C标准库是C语言编程的核心部分,它包含了大量预定义的函数和宏,用于完成各种基本任务,如输入输出、字符串处理、内存管理...

    IntegralToString.rar_V2

    这里我们关注的是Linux环境下的实现,具体针对的是`IntegralToString.rar_V2`,这可能是一个升级版的代码库或者工具,用于在Linux系统v2.13.6上将整型数据转化为字符串。`v2_`标签暗示这是一个版本更新或改进的版本...

    利用UDP协议发送与接收文件

    然后,向接收端发送文件的大小信息,使用`itoa`将文件大小转换为字符串,再通过`sendto`函数发送到指定的接收端地址。 在读取文件内容时,分配内存空间存储文件内容,并使用`ReadFile`函数读取整个文件。读取完成后...

    c语言实现数字雨(1).zip

    在C语言中,可以使用非标准的`system("cls")`(在Windows下)或`system("clear")`(在Unix/Linux下)命令来实现。 8. **多线程**:如果想让数字雨看起来更加复杂和生动,可以考虑使用多线程技术,让不同的数字在...

    C编程精髓总结

    1. **指针与数组的关系**:在C语言中,数组名在某些情况下可以被当作指针来使用,它会指向数组的第一个元素。数组名并不是指针类型,但可以赋值给指针变量。 2. **数组与指针的不同**:虽然数组名在某些时候可等价于...

Global site tag (gtag.js) - Google Analytics