c++ 十进制、十六进制和BCD的相互转换
- #include <stdio.h>
- #include <string.h>
- #include <iostream>
- using namespace std;
- /////////////////////////////////////////////////////
- //
- //功能:二进制取反
- //
- //输入: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 long)(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;
- }
- //main函数
- int main(int argc, char** argv)
- {
- //BCD码转十进制
- unsigned char BCD[3] = { 0x00, 0x53, 0x20 };
- int dec_bcd = BCDtoDec(BCD, 3);
- cout << "dec_bcd : " << dec_bcd << endl;
- //十进制转BCD码
- unsigned char tmp_bff[3] = "";
- DectoBCD(dec_bcd, tmp_bff, 3);
- for (int i = 0; i < 3; ++i)
- {
- //cout << "tmp_buff[" << i << "]: " << tmp_bff[i] << endl;
- printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]);
- }
- cout << endl << endl;
- //十六进制转十进制
- unsigned char Hex[3] = { 0x00, 0x53, 0x20 };
- int dec_hex = HextoDec(Hex, 3);
- cout << "dec_hex: " << dec_hex << endl;
- //十进制转十六进制
- unsigned char hex_bff[3] = "";
- DectoHex(dec_hex, hex_bff, 3);
- for (int i = 0; i < 3; ++i)
- {
- printf("hex_bff[%d] = 0x%02X\n", i, hex_bff[i]);
- }
- system("pause");
- return 0;
- }
c++ 十进制、十六进制和BCD的相互转换的更多相关文章
- c++ 十进制、十六进制和BCD的相互转换,与打印printf,与函数调用
转载: https://blog.csdn.net/sjhuangx/article/details/49947179 c++ 十进制.十六进制和BCD的相互转换 https://blog.csd ...
- ASCII码表(二进制 十进制 十六进制)
css里,允许使用转义字符\+ascii16进制形式; 例如: e的ascii 16进制是65,我们就写为\65 expression -> expr\65ssion 二进制 十进制 十六进制 ...
- iOS十六进制和字符串的相互转换
转换代码,崩溃日志有些是十六进制 NSString *dictString = [dict JSONFragment];//组合成的 dictString==={"content" ...
- Delphi进制转换(二进制/十进制/十六进制)
http://www.cnblogs.com/ywangzi/archive/2012/12/12/2815219.html Delphi进制转换(二进制/十进制/十六进制) 2009-11-2 ...
- Python 进制转换 二进制 八进制 十进制 十六进制
Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...
- Python进制转换(二进制/八进制/十进制/十六进制)
Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义 ba ...
- Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)
/** * 数据类型转换工具类 * @author cyf * */ public class NumConvertUtil{ /** * bytes 转16进制字符串 * @param bArray ...
- delphi 十进制十六进制转换
delphi有提供十进制转换成十六进制的函数: IntToStr(); 返回值为String // 十进制转十六进制 var i: integer; str: string; begin i := ...
- C++ 进制转换 十进制十六进制八进制二进制相互转换
思路: 下面我把相互转换的所有类型都写出来了.实际上都是通过十进制中转的,这样比较简单,写出X进制转成十进制和从十进制转成X进制的两份代码直接拷贝就完成了剩余的部分.哦,对,自己封装了一个charTo ...
随机推荐
- redux 中的 redux-thunk(中间件)
前言 空闲时间把redux中的redux-thunk中间件回顾下,因为以前没有写博客的习惯,都怪自己太年轻,好了 其实: redux的核心概念其实很简单:将需要修改的state都存入到sto ...
- sourceTree 添加 ssh key 方法
1.使用 git 客户的生成公私钥:id_rsa.id_rsa.pub 1.1设置Git的user name和email: $ git config --global user.name " ...
- Python 3标准库课件第二章
整理第一章我又觉得烦,我就看第二章了,灰头土脸的,第二章一.如列表(list).元组(tuple).字典(dict).集合(set)二.2.1 enum:枚举类型 enum模块定义了一个提供迭代和比较 ...
- 【windows&flask】flask通过service自动运行
最近在学习在windows平台用flask框架提供Restful API服务,需要使得flask的windows应用能够开机自动运行,并且后台运行,所以通过service来实现. 首先尝试的是在自己派 ...
- 安装caffe碰到的坑(各种.so未找到)
./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: 没有那个文件或目录 所有类似于上面的错误,都可以用如下格式来解决 ...
- TeamViewer的替代品:realVNC
TeamViewer的替代品:realVNC official web: realvnc: https://www.realvnc.com/ steps: 在需要被控制的PC上装上realVNC的服务 ...
- Windows 环境上域名配置
1.Hosts位置 C:\Windows\System32\drivers\etc\hosts 2.Hosts内容 # Copyright (c) 1993-2009 Microsoft Corp. ...
- vue学习-day03(动画,组件)
目录: 1.品牌列表-从数据库获取列表 2.品牌列表-完成添加功能 3.品牌列表-完成删除功能 4.品牌列表-全局配置数据接口的根域名 5.品牌列表-全局配置emulateJS ...
- ROM和RAM的内存详细说明
1.首先是ROM 的读取是需要提前两个地址的读取,所以要想读取0地址的数据,你需要给地址是2 2.关于宽度,深度的计算 假设我们要存取如下取模的数据,该模的设置口语描述为:这是显示的2个字节,其中一个 ...
- React Native中集成友盟社会化分享-----童叟无欺
1.下载所需的jar,下载地址https://developer.umeng.com/sdk/reactnative?spm=a211g2.211692.0.0.28967d238GW6mC 2.将以 ...