Base16简介

1、将二进制的数据转换为十六进制(0x&&)来进行显示。
2、原二进制一个字节为8个比特,而一位十六进制字符代表的是四位二进制,所以原二进制的一个字节转换成了两个十六进制的字符,两个字符就是两个字节。是原来大小的两倍

Base16实现

1、准备
首先看ASCII字符代码表,确定我们用到的十六进制字符即:48位-57位(0-9映射为0-9);65位-71位(A-F映射为10-15)。

Ps:由于两部分不连续,所以写编码和解码的时候都要重新生成一个表,减小时间损耗。

2、代码实现(编写环境Vs2019)

#include<iostream>
using namespace std;
//制作一个全局的静态转ASCII码的对应关系。四位二进制是0-15所以我们对应写出转换后的16进制字符即可即0-F
static const char BASE16_ENC_TAB[] = "0123456789ABCDEF";
static const char BASE16_DNC_TAB[128] = { //'0-9'对应48-57 'A-F'对应65-70-1,                              //0-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  //1-10-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  //11-20-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  //21-30-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  //31-40-1,-1,-1,-1,-1,-1,-1, 0, 1, 2,  //41-503, 4, 5, 6, 7, 8, 9,-1,-1,-1, //51-60  0-9-1,-1,-1,-1,10,11,12,13,14,15  //61-70 A-F
};                       //转换接口
int Base16Encode(const unsigned char* in, int size, char* out)//此处传递的不一定是字符串,也有可能是二进制数据所以要制定数据的大小int size
{for (int i = 0; i < size; i++){//一个字节取出高4位和低4位char h = in[i] >> 4; //使用高位部分右移将低位部分覆盖,原高位补零char l = in[i] & 0x0F;//高位与0,去掉高位;低位与1,低位不变out[i * 2] = BASE16_ENC_TAB[h];//0-15映射到对应字符out[i * 2 + 1] = BASE16_ENC_TAB[l];}return size * 2;//base16转码后空间扩大一倍,一个字节有八个bit位,转码后4个比特位转化成一个字符,所以一个字节转成了两个字符。
}
//解码接口
int Base16Decode(const string& in, unsigned char* out)
{//将两个字符拼成一个字节  转码后的:B2E2CAD442617365313600for (int i = 0; i < in.size(); i += 2){unsigned char ch = in[i];    //高位转换的字符 ‘B’=>66 : 10unsigned char cl = in[i + 1];  // 低位转换的字符'2'=>50: 2unsigned char h = BASE16_DNC_TAB[ch];//转换成原来的值unsigned char l = BASE16_DNC_TAB[cl];//两个4位拼成一个字节(8位)//高四位 1000 >>4  1000 0000//低四位 0001      0000 0001out[i / 2] = h << 4 | l;}return in.size() / 2;
}
int main(int argc, char* argv[])
{cout << "Test Base16" << endl;const unsigned char data[] = "测试Base16";int len = sizeof(data);//输入长度sizechar out1[1024] = { 0 };//输出空间大小,初始化为0unsigned char out2[1024] = { 0 };int re = Base16Encode(data, len, out1);cout << re << ":" << out1 << endl;re = Base16Decode(out1, out2);cout << re << ":" << out2 << endl;return 0;
}

3、实现效果

Base16的编码和解码原理及代码相关推荐

  1. 彻底弄懂base64的编码与解码原理

    作者介绍 背景 base64的编码原理网上讲解较多,但解码原理讲解较少,并且没有对其中的内部实现原理进行剖析.想要彻底了解base64的编码与解码原理,请耐心看完此文,你一定会有所收获. 涉及算法与逻 ...

  2. 音视频同步原理解析;音频编码和解码原理

    视频流中的DTS/PTS到底是什么? DTS(解码时间戳)和PTS(显示时间戳)分别是解码器进行解码和显示帧时相对于SCR(系统参考)的时间戳.SCR可以理解为解码器应该开始从磁盘读取数据时的时间. ...

  3. WAV系列之二:ADPCM编解码原理及代码实现

    参考自:<adpcm编解码原理及其代码实现> <ADPCM编码与解码学习笔记> <音频编码:ADPCM> 文章目录 1.PCM 1.1.采样 1.2.量化编码 2. ...

  4. java 流 改变编码_Java-IO流之转换流的使用和编码与解码原理

    一.理论: 1.字符流和字节流区别是什么? 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符: 2.什么是 ...

  5. adpcm编解码原理及其代码实现

    目录 1. 源代码 adpcm.h adpcm.c 2. adpcm编解码原理 1.adpcm编码原理 2.adpcm解码原理 注释说明 3. ADPCM数据存放形式 1. adpcm 数据块介绍 2 ...

  6. opus 编码和解码完整demo代码,opus和wav互转(js源码)

    最近研究webRTC中的opus音频的解码.找了很多例子都不了.不是代码太老,就是运行环境有问题.因此,自己结合大神的示例,整理了编码和解码的完整demo源码. opus解码demo可将opus文件保 ...

  7. 红外遥控解码原理及代码实现

    本篇介绍红外解码的原理和程序的写法. 下面来看一下,红外线是如何编码的.![这里写图片描述](https://img-blog.csdn.net/20150926130659823) 下面来具体说一下 ...

  8. FFmpeg在Windows上设置dshow mjpeg编码+libyuv解码显示测试代码

    之前在https://blog.csdn.net/fengbingchun/article/details/103444891中介绍过在Windows上通过ffmpeg dshow设置为mjpeg编解 ...

  9. URL编码及解码原理

    URL编码和Base64编码是不一样的,URL编码有专门的标准,目前Java11中使用的是RFC2396(参考:https://www.ietf.org/rfc/rfc2396.txt). 在 jav ...

  10. Python-base编码和解码方法

    文章目录 前言 一.函数介绍 二.base16 [1]. 编码 [2]. 解码 三.base32 [1]. 编码 [2]. 解码 四.base64 [1]. 编码 [2]. 解码 前言 仅介绍pyth ...

最新文章

  1. bzoj 5092: [Lydsy1711月赛]分割序列
  2. easyui 中combogrid 实现多选,反选效果
  3. Apache Kafka-生产消费基础篇
  4. ways to improve your presentation by your own
  5. Acwing 218. 扑克牌
  6. C语言实现单链表操作
  7. 根据经纬度计算范围_高中地理必修一二三思维导图+计算公式全汇总!能用3年...
  8. 谷歌微软等公司承诺大力投资于网络安全建设
  9. [luogu P3128][USACO15DEC]Max Flow [LCA][树上差分]
  10. 使用Oracle Wrap工具加密你的代码
  11. LibMeshEquationSystem 类接口
  12. 反转链表与链表实现两数相加(简单思路)
  13. 潮流计算程序————电力网络的节点编号优化(Tinney-1编号)(Python语言描述)
  14. MATLAB与STK互联23:卫星对象操作(14)—仿真分析案例1,建立8个地面站,分析对卫星的可见性
  15. ftpclient覆盖上传文件
  16. Android接入腾讯Bugly统计SDK
  17. 从网站细节入手提高易用性
  18. 上一主题 下一主题 一个微信账号登陆信息提取软件,有人知道吗?
  19. 提高QPS方法基本思路
  20. JAVA程序员和C程序员的差距在哪里?

热门文章

  1. 学习笔记:FW内容安全概述
  2. 静态测试和动态测试有何区别
  3. threejs 加载obj模型
  4. 众为兴SCARA四轴机械臂编程(一)——基于ModbusTCP协议
  5. 极路由第三方插件大全_极路由极硬货HC5663春节折腾记
  6. 商务与经济统计阅读笔记2
  7. 【matlab】 matlab中如何取整
  8. 核方法概述----正定核以及核技巧(Gram矩阵推导正定核)
  9. 多测师拱墅校区肖sir___性能测试之单个接口性能和多个接口性能测试(3)
  10. 小写金额转换成大写金额