字符串转整形 整形转字符串 等一系列转换

/***********************
*函数功能:整形转字符串
*输入参数:
            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码
    }
}

原文地址:https://www.cnblogs.com/qifeng1024/p/12534007.html

时间: 2024-10-11 01:02:18

字符串转整形 整形转字符串 等一系列转换的相关文章

【LeetCode】- String to Integer (字符串转成整形)

[ 问题: ] Hint:Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes:It is intended for this problem to be specified vaguely (ie, no given input specs). Y

回调函数实现对整形数组和字符串的排序

(一)冒泡排序实现对整形数组的排序 在以前,我们只会使用冒泡排序的方法对整行数组进行排序,简单的两个for循环,外层循环控制循环次数,内层循环控制比较次数,就像下面代码,便可实现: #include<stdio.h> int main() { int arr[10]={11,9,8,7,6,5,4,3,2,1}; int i=0; int j=0; int tmp=0; for(j=0;j<10;j++) { for(i=0;i<10-j;i++) if(arr[i]>arr

【Java】字符串变量和整形之间的相互转化与静态方法static

字符串变量和整形之间的相互转化在任何编程语言中都是很常见的东西,请不要与(int)String等强制类型转换混淆,这样做是不对的,(String)int,诸如这样是不能完成字符串变量和整形之间的相互转化的,强制类型转换只用于,整形int与浮点float的互转,父类转化为子类. 在Java中的字符串String转化为整形int,可以利用Integer.parseInt(),而整形int转化成String虽然很多人都知道大名鼎鼎的toString(),但不应该对此形成定式思维,其实你在对于任意一个整

黑马程序员---C基础9【字符串的输入输出】【字符串相关函数】【指针】【指针变量初始】【二级指针】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [字符串的输入输出] 1.字符串输出: %s-------从给定的地址开始输出字符直到遇到\0停止: printf("%s\n",&a[3]);  printf("%s\n",a); char a[]="hellowo\0rd!"; 2.字符串输入: 从键盘上接收一个字符串,保存在以a为首地址的字符数组中 scanf("%s&

字符串工具类(指定字符串的长度和判断是否为空等方法)

package com.sec.util; /** * 字符串工具类 * @author Administrator * */public class StringUtil { /** * 过滤<,>,\n 字符串的方法 * @param input * @return */ public static String filterHTML(String input){ if(input == null || input.length() == 0){ return input; } input

php截取某二个特殊字符串间的某段字符串

在php开发的过程中,有时候会用到截取某二个特殊字符串间的某个字符串,并对这个字符串做特殊的处理,那么对截取出来的字符串做什么特殊处理我们临时无论.我们今天先讲php截取某二个特殊字符串间的某个字符串的方法,以下我们以截取[start]到[/end]之间的字符串,当中的代码例如以下: <? php header('content-type:text/html;charset=utf-8'); $a=" 互联网出版许可证编号[start]华强北在线[/end]华强北商城,[start] ~~

PHP判断字符串中是否包含指定字符串,支持中文哦

RT,随手写的 1 /** 2 * 判断字符串中是否包含指定字符串 3 * @var source 源字符串 4 * @var target 要判断的是否包含的字符串 5 * @return bool 6 */ 7 function hasstring($source,$target){ 8 preg_match_all("/$target/sim", $source, $strResult, PREG_PATTERN_ORDER); 9 return !empty($strResul

用户输入一个字符串,如果以a结尾,则认为是合法字符串,否则为非法字符串,提示用户重新输入

import java.util.Scanner; /** * */ /** * Homework14 * * @Description:用户输入一个字符串,如果以a结尾,则认为是合法字符串,否则为非法字符串,提示用户重新输入. Test04 * * @author * * email: [email protected] 2017年4月21日上午12:27:02 * */public class Test04 { public static void main(String[] args) {

给定两个字符串,获取两个字符串中最大相同的子串

1 package weekpratisce; 2 3 ///给定两个字符串,获取两个字符串中最大相同的子串 4 public class Demo9 { 5 public static void main(String[] args) { 6 String xx = "aaaaaaaaaaddddddd", yy = "45ddddda"; 7 String str = getMaxsubstring(xx, yy); 8 System.out.println(s