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