Base32编码转换
在网络传入字符串过程中,如果编码方式是基于ASCII,那么会造成什么问题?比如:url地址中存在"/"(如:www.csdn.net/nav/ai),字符串中编码中也存在"/",这样就会出现错误地址解析.为了防止这种情况的出现,出现了Base16,Base32,Base64编码方式.我们知道计算机传输的单位是字节,也就是8个比特位,按照一个字节编码的方式结果就有256种状态(每个比特位0或者1两种状态,8位就是=256),ASCII编码是将8个比特位中最高位置为0,所以总共可表示128个字符(即=128).为了避免冲突,去掉一些特殊字符,重新编码.例如Base16编码,编码后的字符只会在(0~9,A~F)中,Base32编码后字符就会在(A~Z, 2~7)中以及填充符"="中出现.
Base16编码
Base16编码就是将ASCII字符集中可打印的字符(数字0~9和字母A~F)对应的二进制字节数据进行编码,编码的方式:
1.将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数,不足8比特位高位补0.然后将所有的二进制全部串起来,4个二进制位为一组,转化成对应十进制数.
2.根据十进制数值找到Base16编码表里面对应的字符.Base16是4个比特位表示一个字符,所以原始是1个字节(8个比特位)刚好可以分成两组,也就是说原先如果使用ASCII编码后的一个字符,现在转化成两个字符.数据量是原先的2倍.
Base16编码表
案例:将"ILU"字符串,根据ASCII编码得到对应的二进制,将所有二进制串起来,然后按4个二进制位分割,转化成十进制数值,根据Base16编码表得到编码"494C55",编码后的数据是原先的2倍.
文本 |
I |
L |
U |
|||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII编码 |
73 |
76 |
85 |
|||||||||||||||||||||
二进制位 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
十进制数值 |
4 |
9 |
4 |
12 |
5 |
5 |
||||||||||||||||||
Base16编码 |
4 |
9 |
4 |
C |
5 |
5 |
Base32编码
与Base16编码区别的是,Base32使用了ASCII编码中可打印的32个字符(大写字母A~Z和数字2~7)对任意字节数据进行编码.Base32将串起来的二进制数据按照5个二进制位分为一组,由于传输数据的单位是字节(即8个二进制位).所以分割之前的二进制位数是40的倍数(40是5和8的最小公倍数).如果不足40位,则在编码后数据补充"=",一个"="相当于一个组(5个二进制位),编码后的数据是原先的倍.
Base32编码表
案例:"ILU"字符串根据Base32编码进行编码,先根据ASCII编码得到对应字符编码值以及对应二进制,将所有二进制串起来,然后按照5个二进制位为一组分割 ,得到十进制值=>找到Base32编码表找到对应的字符.案例总共分割成了5组(25位),还差三组(15位).在末尾补充3个"=".经过Base32编码后最终值应是"JFGFK===".
文本 |
I |
L |
U |
|||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII编码 |
73 |
76 |
85 |
|||||||||||||||||||||
二进制位 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
十进制数值 |
9 |
5 |
6 |
5 |
10 |
|||||||||||||||||||
Base32编码 |
J |
F |
G |
F |
K |
Base64编码
Base64编码使用了ASCII编码中64个可打印的字符(大写字母A~Z,小写字母a~z,数字0~9以及"+","/")将任意字节数据进行编码.Base64编码将串起来的二进制以6位进行分割.所以分切之前的二进制位数应该是24的倍数(即6,8的最小公倍数).如果不足24位,则在编码后数据后面添加"=",一个"="想当于6个二进制位.数据量是原先的倍.
Base64编码表
案例:"ILU"字符串编码,前面的过程与Base16编码,Base32编码一样,区别是将串起来的二进制按6位分为一组.得到4组(24位).所以末尾不用补充"=",所以经过Base64编码后的结果是"SUxV".
文本 |
I |
L |
U |
|||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII编码 |
73 |
76 |
85 |
|||||||||||||||||||||
二进制位 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
十进制数值 |
18 |
20 |
49 |
21 |
||||||||||||||||||||
Base64编码 |
S |
U |
x |
V |
总结
1.Base16编码是包含了数字(0~9)和大写字母(A~F),Base32编码与Base64编码最大区别是前者没有小写字母.Base32编码可以用于文件系统的名称(不区分大小情况).而Base64编码后数据量相比原先不是增加很多,可以用于网络传输.(比如下载链接)
Base32编码转换相关推荐
- 磁力链接的BASE32编码向HEX编码的转换
1.传统格式 磁力链接(简称"磁链")是一种下载链接格式,下载时的效果相当于使用种子文件进行下载,但是比种子文件便于记录与传播. 传统的磁力链接格式,举例如下: magnet:?x ...
- python编码大全_Python3中的编码转换大全(不定期更新)
Python3编码转换大全 进制转换 其他进制转十进制 2 -> 10 int('1100',2) 12 8 -> 10 int('1100',8) 576 16 -> 10 int ...
- c语言中二进制用什么字母表示方法,看C语言编码转换--------负数的二进制表示方法...
今天在看C语言编码转换时,既然对负数的二进制表示有些遗忘,查了下网上的资料,他们说的是个P!误人子弟!和大家讨论了下,贴出来已备在此遗忘: 假设有一个 int 类型的数,值为5,那么,我们知道它在计算 ...
- python文本编码转换_Python: 转换文本编码
最近在做周报的时候,需要把csv文本中的数据提取出来制作表格后生产图表. 在获取csv文本内容的时候,基本上都是用with open(filename, encoding ='UTF-8') as f ...
- Python:UTF-8编码转换成GBK编码
2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # -*- coding:utf-8 -*- #UTF-8转换成GBK编码 #te ...
- php ascii转native,编码转换工具native2ascii的使用
1,原理 Property文件中,使用的编码根据机器的设置可能是GBK或者UTF-8.而在Java中读取Property文件时使用的是Unicode编码,编码方式不同会导致中文乱码,因此需要将Prop ...
- java. xerces转xml_Xerces -C++遇到的xml编码转换问题
前两天收到一个同事提交的一个疑难问题,在进行xml编码时,一些特殊的gbk编码汉字,会转换成乱码.当时大概的看了下,应该是编码转换的格式问题,怀疑为开源库的bug,给出一个简单的解决方案后就没有在关注 ...
- VC编写自己构造http协议数据的post上传图片类(MFC环境 带编码转换)(转)
上次用VC写了个MFC环境下的post数据类,地址: /Html/diannaojishu/2009-10/4905858580.html 这次将这个类进行扩展,可以post图片.但这两个post所使 ...
- linux字符串编码转换函数,Linux C++ 字符串 编码识别、编码转换
最近在做一个类似垂直下载的爬虫系统.下载之后有个解析模块,解析之后要求编码一致的向后传入索引,便遇到了编码转换问题. 1. 编码的识别 推荐使用 libchardet, 可以在这个页面下载,使用说明就 ...
- String构造方法和字符集编码转换
2019独角兽企业重金招聘Python工程师标准>>> 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础 ...
最新文章
- MySql按日期进行统计(前一天、本周、某一天)[转载]
- SunDay天气——开放源代码
- docker-compose 安装方法
- 庆祝Dojo中文博客成为CSDN博客专家!
- 第32讲:实时处理利器 mitmproxy 的使用
- extjs入门(06) 按钮占两行
- 一篇文章详解大数据技术和应用场景
- 人工智能连接学派和符号学派的发展历程图
- “让我陪你走到人生的尽头。” | 也许AI能提供更好的临终关怀
- 码农の带娃绝技:TensorFlow+传感器,200美元自制猜拳手套
- 3.1~4 处理器架构IA32/x86介绍+IA32架构下汇编基本介绍
- android pdf阅读器推荐,Android最强PDF阅读器 十款软件大PK
- 人工智能——皇帝的新脑还是人类的终结(学习笔记)
- Modelsim10.4-win64软件下载安装与破解
- ArcMap DayDreamInGIS数据处理工具 插件之 搜狗词库生成
- python艺术分形数_分形维度特征——基于Python实现
- 软件工程——(4)软件设计 思维导图
- 分贝相关概念及转换:dB、dBSPL、dBm、dBu、dBV、dBFS
- 手把手刷数据结构-1.手把手刷链表算法
- 三角函数π/2转化_浅谈三角函数导数综合题(1)
热门文章
- 使用iToolab UnlockGo 删除iPhone/iPad上的各种锁
- 读《线上幽灵:世界头号黑客米特尼克自传》 有感
- 字符串转数字函数 atol、atoll和strtol、strtoll、strtoul、strtoull 分析
- malloc函数的使用
- 戴尔t3500服务器系统安装,Dell Precision T3500 工作站系统指南
- ThinkPHP5房屋中介管理系统
- teamviewer路由器设置虚拟服务器,远程控制软件TeamViewer的配置详细操作步骤
- mysql系统结构图_MySQL架构图
- C语言的printf输出格式控制
- DOM drag 事件