• volcanol的工控博客


    【1】main.c

    
    
    /****************************************************
    *
    *    把整数按照进制数转换为相应进制的字符串
    *(要考虑符号),比如 -1234,转换为 “-1234”。
    *   
    *
    ****************************************************/
    
    #include <stdio.h>
    #include <string.h>
     
    #define BUF_LEN 12
    
    //将数字转换成十进制子函数
    void iToDecCh(int iNum,char *p);
    
    //字符串倒置函数
    void strReverse(char* str);
    
    /*
            根据不同的进制申请不同的字符空间
        因为有符号的int最大值为:
            INT_MAX: +2147 4836 47
            INT_MIN: -2147 4836 47
        共需要11个字符,加上最后的'';则需要12字节的空间
            
            任何1个整数表示成16进制,则需要 0X FFFF FFFF
        2+8 个字符,加上最后的'';则需要11个字节的空间
    
        这里定义12个字符的buf。
    */
    char strBuf[BUF_LEN];
    
    
    
    /*******
    *
    *   主函数: main 函数开始
    *
    ********/
    int main()
    {
        char* p;
        
        iToDecCh(0,strBuf);
        //strReverse(strBuf);
    
        p=strBuf;
        while(*p)
            putchar(*p++);
    
        getchar();
        return 0;
    }
    
    /******************************************
            将一个数字转换成十进制字符串
    算法:
    
    原型:
         void iToDecCh(int num,char *p)
    返回值:
        无
    参数:
        int num: 待转换的数字
        char* p: 存储字符串的线性地址空间首地址
    异常:
         无
    其他:
        无
    ********************************************/
    void iToDecCh(int num,char *p)
    {
        int i;
        int flag;
    
        unsigned int decMask;
        unsigned int signedFlag;
    
        signedFlag=0x8000000; // 用于判断正负
    
        if(0==num)
        {
            p[0]='+';
            p[1]='0';
            return ;
        }
             
        //判断正、负情况     
        if(num & signedFlag)
        {
            flag=0;  // p[11] ='-'; 负数    
            num=-1 * num; //将负数变成整数
        }
        else
        {
            flag=1;  // p[11] ='+'; 正数
        }
    
        i=0;
        while(num > 0)
        {          
            p[i++]= num % 10 + '0';
            num=num /10;
        }
    
        if(flag==1)
            p[i++]='+';
        else
            p[i++]='-';
    
        p[i]='';
    
        strReverse(p);
    }
    
    
    /*****************************************
            字符串倒置函数
    算法:
    
    原型:
        void strReverse(char* str)
    返回值:
        无
    参数:
        char *str:待倒置的字符串首地址
    异常:
        无
    其他:
    
    ******************************************/
    void strReverse(char* str)
    {
        int i,
            j;
    
        j=strlen(str);
    
        for(i=0,j--;i<j;i++,j--)
        {
            str[i]=str[i] ^ str[j];
            str[j]=str[j] ^ str[i];
            str[i]=str[j] ^ str[i];
        }
    }
    
    
    
    
    

    【2】main.c

    #include <stdio.h>
    #include <string.h>
    
    #define NUL ('')
     
    
    char ftoaArray[30];
    char itoaArray[30];
    
    //字符串倒置函数,将 “abcd” 倒置为 “dcba”
    char* strRev(char* str)
    {
        char* head;
        char* pShift;
    
        head=str;
        pShift=str;
    
        while(*pShift) pShift++;
    
        --pShift;
        while(pShift>head)
        {
            *pShift = *pShift ^ *head;
            *head =   *pShift ^ *head;
            *pShift-- = *pShift ^ *head++;    //最后的时候移动指针的指向
        }
    
        return str;
    }
    
    
    //将浮点数转换为字符串, 保留4位数据精度
    //这里是在ADC转换的时候,进行测试用的
    //所以这里没有进行正负的判断
    char* ftoa(float num)
    {
        int i;
        int x;
        float y;
        char* shift;
    
        x=(int)num; //取数据的整数部分
    
        shift=ftoaArray;
        while(x > 10)
        {
            *shift++= x%10 + '0';
            x /= 10;
        }
        *shift++ = x + '0';
        *shift = NUL ;
        strRev(ftoaArray);
    
        *shift++ = '.'; //把最后的 '' 替换为 '.'
    
    
        //这样处理就可以将小数点小于4位、和大于4位的都处理完
        i=1;
        y=num-(int)num;  //y为小于1的小数
        while(y>0.000001)  
        {
            y= y*10;
            x=y;
            *shift++ =x +'0';
            y = y-(int)(y);
    
            if(4==i) //不管有没有转换完,循环4次都跳出 
            {
                break;
            }
            i++;
        }
        *shift = NUL;
    
        return ftoaArray;
    }
    
    //将十进制的数转换为字符串
    char* itoa(unsigned short num)
    {
        int i=0;
    
        while(num >= 10)
        {
            itoaArray[i++]=num%10 + '0';
            num    /= 10;
        }
        itoaArray[i++]=num + '0';
        itoaArray[i]=NUL;
    
        strRev(itoaArray);
    
        return itoaArray;
    }
    
    
    
    /*******
    *
    *   主函数: main 函数开始
    *
    ********/
    int main()
    {
    
        char* str="abcd";
        strRev(str);
        puts(str);
    
        itoa(1234);
        puts(itoaArray);
    
    
        ftoa(311.1415516);
        printf("%s",ftoaArray);
    
        getchar();
        return 0;
    }

       其实,在第二个的itoa中,可以用指针代替数组的index索引,用指针速度更快。

  • 相关阅读:
    方维P2P  二次开发
    Array 数组去重 总结10方法(7)
    PHP  OOP学习总结
    [转载]js:数组里面获取键名和键值
    Array对象的方法实现(6)----Array.prototype.indexOf(实现常规参数的功能)
    在Apache服务器上启用GZip压缩静态内容的方法
    PHP 程序授权验证开发思路
    【转】zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
    公钥私钥,HTTPS,CA证书机构,单向和双向认证
    Array对象的方法实现(5)----Array.prototype.includes(实现常规参数的功能)
  • 原文地址:https://www.cnblogs.com/volcanol/p/3352723.html
Copyright © 2020-2023  润新知