16进制、10进制、BCD码之间的转换
2011-12-30 19:32
405 查看
转自http://01258.blog.51cto.com/2229941/473635,自己mark作为笔记。
#include <stdio.h> #include <string.h> ///////////////////////////////////////////////////// // //功能:二进制取反 // //输入: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++) { dst[i] = src[i]^0xFF; } 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 int)(hex[i])<<(8*(length-1-i)); } return rslt; } ///////////////////////////////////////////////////////// // //功能:十进制转十六进制 // //输入: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--) { hex[i] = (dec%256)&0xFF; dec /= 256; } return 0; } ///////////////////////////////////////////////////////// // //功能:求权 // //输入: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 = ((bcd[i]>>4)&0x0F)*10 + (bcd[i]&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; Bcd[i] = ((temp/10)<<4) + ((temp%10) & 0x0F); Dec /= 100; } return 0; } int main() { register int i; unsigned char tmp_bff[12] = ""; //十六进制转十进制 unsigned char HEX[4] = {0x34, 0xFE, 0x3E, 0xFF}; unsigned long dec_hex = 0; dec_hex = HextoDec(HEX, 4); printf("dec_hex = %d\n", dec_hex); //十进制转十六进制 DectoHex(dec_hex, tmp_bff, 4); for(i=0; i<5; i++) { printf("tmp_bff[%d] = 0x%02X\n",i, tmp_bff[i]); } //BCD码转十进制 unsigned long dec_bcd = 0; unsigned char BCD[4] = {0x98, 0x23, 0x45, 0x78}; dec_bcd = BCDtoDec(BCD, 4); printf("dec_bcd = %d\n", dec_bcd); //十进制转BCD码 DectoBCD(dec_bcd, tmp_bff, 4); for(i=0; i<5; i++) { printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]); } getchar(); } 4月30日 16进制、10进制、BCD码之间的转换 #include <stdio.h> #include <string.h> ///////////////////////////////////////////////////// // //功能:二进制取反 // //输入: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++) { dst[i] = src[i]^0xFF; } 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 int)(hex[i])<<(8*(length-1-i)); } return rslt; } ///////////////////////////////////////////////////////// // //功能:十进制转十六进制 // //输入: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--) { hex[i] = (dec%256)&0xFF; dec /= 256; } return 0; } ///////////////////////////////////////////////////////// // //功能:求权 // //输入: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 = ((bcd[i]>>4)&0x0F)*10 + (bcd[i]&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; Bcd[i] = ((temp/10)<<4) + ((temp%10) & 0x0F); Dec /= 100; } return 0; } int main() { register int i; unsigned char tmp_bff[12] = ""; //十六进制转十进制 unsigned char HEX[4] = {0x34, 0xFE, 0x3E, 0xFF}; unsigned long dec_hex = 0; dec_hex = HextoDec(HEX, 4); printf("dec_hex = %d\n", dec_hex); //十进制转十六进制 DectoHex(dec_hex, tmp_bff, 4); for(i=0; i<5; i++) { printf("tmp_bff[%d] = 0x%02X\n",i, tmp_bff[i]); } //BCD码转十进制 unsigned long dec_bcd = 0; unsigned char BCD[4] = {0x98, 0x23, 0x45, 0x78}; dec_bcd = BCDtoDec(BCD, 4); printf("dec_bcd = %d\n", dec_bcd); //十进制转BCD码 DectoBCD(dec_bcd, tmp_bff, 4); for(i=0; i<5; i++) { printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]); } getchar(); }
相关文章推荐
- 16进制、10进制、BCD码之间的转换
- 16进制、10进制、BCD码之间的转换
- 16进制 10进制 BCD码之间的转换
- 最简单的10进制和16进制之间的转换方法
- 10进制与16进制之间的转换 delphi
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- iOS 一个在UDP/TCP通信时,对16进制、10进制、NSData等数据之间的转换发送等处理的工具类库,一行代码将16进制字符串轻松转换成UDP需要的指令数据
- LSN的10进制和16进制之间的转换
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- c# 2进制、8进制、10进制、16进制之间的转换
- java 2、8、10、16进制之间的转换
- java中进行2、8、16、10进制之间的转换
- vc 10进制与2 8 16进制相互转换
- 10进制转换成16进制的函数(自写函数模板)