zoukankan      html  css  js  c++  java
  • 字符串转整形 整形转字符串 等一系列转换

    /***********************
    *函数功能:整形转字符串
    *输入参数:
                indata    输入整形
                outdata    输出字符串
                radix    进制        十进制则填 10
    *返回值  :输出字符串
    ************************/
    char *int_to_char(int indata,char outdata[],int radix)
    {
        char temp[33];
        char *tp = temp;
        int i;
        unsigned v;
        int sign;
        char *sp;
        if(radix > 36 || radix < 1)
            return 0;
        sign = (radix == 10 && indata < 0); //十进制负数
        if(sign)
            v = -indata;
        else
            v = (unsigned)indata;
        while(v || tp == temp)       //转化操作
        {
            i = v % radix;
            v = v / radix;
            if(i < 10)
                *tp++ = i + '0';
            else
                *tp++ = i + 'a' - 10;
        }
        if(outdata == 0)
            outdata = (char*)malloc((tp - temp) + sign + 1);
        sp = outdata;
        if(sign)   //是负数的话把负号先加入数组
            *sp++ = '-';
        while(tp > temp)
            *sp++ = *--tp;
        *sp = 0; 
    
        return outdata;
    } 
    /***********************
    *函数功能:字符串转转整形
    *输入参数:
                indata    输入字符串
    *返回值  :输出的整形数
    ************************/
    int char_to_int(char indata[])
    {
        char *str = indata;
        int result;
    //保存返回结果的
        int signal = 1;
    //保存符号的,默认正数
    //判断第一个数字是否合法
        if((*str>='0'&&*str<='9')||*str=='-'||*str=='+')
        {
    //如果是-,符号变为-1,指针右移
    //如果是+,指针右移(总之指向了第一个数字)
            if(*str=='-'||*str=='+')
            {
                if(*str=='-')
                    signal = -1;
                str++;
            }
        }
        else 
        {
        return 0;//第一个不是+,-或数字,非法返回0
        }
        //这里就是转换,是数学的问题就不解释了
        while(*str>='0'&&*str<='9')
        {
            result = result*10+(*str++ -'0');
        }
        return signal*result;
    }
    /***********************
    *函数功能:16进制转换为bcd
    *输入参数:
                indata    输入16进制
    *返回值  :输出16进制
    ************************/
    unsigned char Hex_to_Bcd(unsigned char indata)
    {
        unsigned char temp1,temp2;
        temp1 = indata/10;
        temp2 = indata%10;
        return    ((temp1<<4)+temp2);
    }
    /***********************
    *函数功能:bcd转为16进制
    *输入参数:
                indata    输入bcd码
    *返回值  :输出16进制
    ************************/
    unsigned char Bcd_to_Hex(unsigned char indata)
    {
        return    ((indata>>4)*10+(indata&0x0f));
    }
    /***********************
    *函数功能:bcd转为ascii
    *输入参数:
                bcd    输入bcd
                ascii 输出ascii
                len  Bcd码字节个数
    *返回值  :
    ************************/
    void bcd_to_asc(unsigned char *ascii,unsigned char *bcd,int Len)
    {
        int i;
        for(i=0;i<Len;i++)
        {
            //高Nibble转换
            if(((*(bcd + i) & 0xF0) >> 4) <= 9)
            {
                *(ascii + 2*i) = ((*(bcd + i) & 0xF0) >> 4) + 0x30;
            }
            else
            {
                *(ascii + 2*i)  = ((*(bcd + i) & 0xF0) >> 4) + 0x37;   //大写A~F
            }    
            //低Nibble转换
            if((*(bcd + i) & 0x0F) <= 9)
            {
                *(ascii + 2*i + 1) = (*(bcd + i) & 0x0F) + 0x30;
            }
            else
            {
                *(ascii + 2*i + 1) = (*(bcd + i) & 0x0F) + 0x37;   //大写A~F
            }    
        }
    }
    /***********************
    *函数功能:ascii转为bcd
    *输入参数:
                bcd    输出bcd
                ascii 输入ascii
                len  ascii码字节个数
    *返回值  :
    ************************/
    void ascii_to_bcd(unsigned char *bcd,unsigned char *ascii,int Len)
    {
        int i;
        unsigned char high = 0,low = 0;
        for(i = 0; i < Len; i++) 
        {
            //待转bcd码高Nibble
            if((*(ascii + i) >= 0x61) && (*(ascii + i) <= 0x66))      //range a~f
            {
                high = *(ascii + i) - 0x57;
            }
            else if((*(ascii + i) >= 0x41) && (*(ascii + i) <= 0x46))  //range A~F
            {
                high = *(ascii + i) - 0x37;
            }
            else if((*(ascii + i) >= 0x30) && (*(ascii + i) <= 0x39))  //range 0~9
            {
                high = *(ascii + i) - 0x30;   
            }
            else
            {
                high = 0x00 ;                                       //其他
            }
            
            //待转bcd码低Nibble
            i++;
            if(i < Len)
            {
                if((*(ascii + i) >= 0x61) && (*(ascii + i) <= 0x66))    //range a~f
                {
                    low = *(ascii + i) - 0x57;
                }
                else if((*(ascii + i) >= 0x41) && (*(ascii + i) <= 0x46)) //range A~F
                {   
                    low = *(ascii + i) - 0x37;
                }
                else if((*(ascii + i) >= 0x30) && (*(ascii + i) <= 0x39))  //range 0~9
                {
                    low = *(ascii + i) - 0x30;
                }
                else
                {
                    low = 0x00 ;                                       //其他
                }
            }
            else
            {
                i--;                                                //预防255个时溢出出错
                    
                low = 0x00 ;                                       
    //如果是奇数个末尾补0x00 
            }
            *(bcd + i/2) = (high << 4) | low;                      //合并BCD码
        }
    }
  • 相关阅读:
    python functools.lru_cache做备忘功能
    python clock装饰器 计算函数执行时间,执行结果及传入的参数
    python 闭包计算移动均值及nonlocal的使用
    使用 memoryview 和 struct 查看一个 GIF 图像的首部
    寻医问药 爬虫
    defaultdict使用及__missing__理解
    字典推导式
    collections deque队列及其他队列
    bisect 二分查找
    python array 使用创建10万浮点数
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12534007.html
Copyright © 2011-2022 走看看