十进制,十六进制,BCD码相互转换C程序.doc
本人用过的十六进制、BCD码之间的转换C程序,还有十进制的,可以参考使用,#include <stdio.h> #include <string.h> / / /功能:十进制转十六进制 / /输入:int dec 待转换的十进制数据 / int length 转换后的十六进制数据长度 / /输出:unsigned char *hex 转换后的十六进制数据 / /返回:0 success / /思路:原理同十六进制转十进制 / int DectoHex(int dec, unsigned char *hex, int length) int i; for(i=length-1; i>=0; i-) hexi = (dec%256)&0xFF; dec /= 256; return 0; / / /功能:二进制取反 / /输入:const unsigned char *src 二进制数据 / int length 待转换的二进制数据长度 / /输出:unsigned char *dst 取反后的二进制数据 / /返回:0 success / / int convert(unsigned char *dst, const unsigned char *src, int length) int i; for(i=0; i<length; i+) dsti = srci0xFF; return 0; / / /功能:十六进制转为十进制 / /输入:const unsigned char *hex 待转换的十六进制数据 / int length 十六进制数据长度 / /输出: / /返回:int rslt 转换后的十进制数据 / /思路:十六进制每个字符位所表示的十进制数的范围是0 255,进制为256 / 左移8位(<<8)等价乘以256 / / unsigned long HextoDec(const unsigned char *hex, int length) int i; unsigned long rslt = 0; for(i=0; i<length; i+) rslt += (unsigned long)(hexi)<<(8*(length-1-i); return rslt; / / /功能:求权 / /输入:int base 进制基数 / int times 权级数 / /输出: / /返回:unsigned long 当前数据位的权 / / unsigned long power(int base, int times) int i; unsigned long rslt = 1; for(i=0; i<times; i+) rslt *= base; return rslt; / / /功能:BCD转10进制 / /输入:const unsigned char *bcd 待转换的BCD码 / int length BCD码数据长度 / /输出: / /返回:unsigned long 当前数据位的权 / /思路:压缩BCD码一个字符所表示的十进制数据范围为0 99,进制为100 / 先求每个字符所表示的十进制值,然后乘以权 / unsigned long BCDtoDec(const unsigned char *bcd, int length) int i, tmp; unsigned long dec = 0; for(i=0; i<length; i+) tmp = (bcdi>>4)&0x0F)*10 + (bcdi&0x0F); dec += tmp * power(100, length-1-i); return dec; / / /功能:十进制转BCD码 / /输入:int Dec 待转换的十进制数据 / int length BCD码数据长度 / /输出:unsigned char *Bcd 转换后的BCD码 / /返回:0 success / /思路:原理同BCD码转十进制 / / int DectoBCD(int Dec, unsigned char *Bcd, int length) int i; int temp; for(i=length-1; i>=0; i-) temp = Dec%100; Bcdi = (temp/10)<<4) + (temp%10) & 0x0F); Dec /= 100; return 0; int main() register int i; unsigned char tmp_bff12 = "" /十六进制转十进制 unsigned char HEX4 = 0x34, 0xFE, 0x3E, 0xFF; unsigned long dec_hex = 0; dec_hex = HextoDec(HEX, 4); printf("dec_hex = %dn", dec_hex); /十进制转十六进制 DectoHex(dec_hex, tmp_bff, 4); for(i=0; i<5; i+) printf("tmp_bff%d = 0x%02Xn",i, tmp_bffi); /BCD码转十进制 unsigned long dec_bcd = 0; unsigned char BCD4 = 0x98, 0x23, 0x45, 0x78; dec_bcd = BCDtoDec(BCD, 4); printf("dec_bcd = %dn", dec_bcd); /十进制转BCD码 DectoBCD(dec_bcd, tmp_bff, 4); for(i=0; i<5; i+) printf("tmp_bff%d = 0x%02Xn", i, tmp_bffi); getchar();