Base 编码家族:Base16 编码

news2024/10/6 10:30:34

文章目录

  • 参考
  • 环境
  • Base 编码
      • Base 的含义
        • 计数系统
        • 编码系统
      • 为什么需要 Base 编码?
      • ASCII 编码
  • Base16 编码
      • 概念
      • Base16 字符集
  • Base16 编码原理
      • 编码
  • Base16 编码特点
      • 体积膨胀

参考

项目描述
搜索引擎BingGoogle
AI 大模型文心一言通义千问讯飞星火认知大模型ChatGPT
Tuts+Base What? A Practical Introduction to Base Encoding
RFC 文档RFC4648

环境

项目描述
绘图工具draw.io 21.7.5

Base 编码

Base 的含义

计数系统

Base 这个词在数学中通常用来描述计数系统的 基数基数即计数系统中用于表示数字的不同符号的数量

举个栗子

  1. 二进制计数系统
    二进制计数系统中仅使用两个符号表示数字,即 01,故二进制计数系统可以使用 Base2 来进行表示。
  2. 十进制计数系统
    十进制计数系统中仅使用十个符号表示数字,即 0 ~ 9,故十进制计数系统可以使用 Base10 来进行表示。
  3. 十六进制计数系统
    十六进制系统中仅使用十六个符号表示数字,即 0 ~ 9 及 a ~ f,故十六进制计数系统可以使用 Base16 来进行表示。
编码系统

Base 在 计算机编码系统 中则用于表示该编码系统所使用的字符集的大小。Base 描述了该系统的基数,而后面的数字表示这个 基数的具体值。这样的命名方法 直观地 告诉我们这个编码系统使用了多少种不同的字符来表示数据。

举个栗子

  1. Base16 编码系统
    Base16 编码系统中使用 十六个字符 来对数据进行编码。
  2. Base64 编码系统
    Base64 编码系统中使用 六十四个字符 来对数据进行编码。

为什么需要 Base 编码?

Base 编码能够将 二进制数据转换为文本表示,以便在不同的环境中使用。

项目描述
便于数据的查看二进制数据可能包含不能直接打印或显示的字符。Base 编码可以 将这些非打印字符转换为可打印的字符集,从而使数据更容易处理和查看
字符集限制许多传输协议和系统只接受特定的字符集,如 ASCII。Base64 和其他 Base 编码可以 将任意的二进制数据转换为这些协议和系统可接受的格式
数据完整性在某些情况下,数据传输可能会导致特定的二进制值被解释为 控制字符等特殊字符,从而损害数据的完整性。使用 Base 编码可以确保数据在传输过程中不会被误解释或损坏。

ASCII 编码

ASCII(American Standard Code for Information Interchange) 是一种字符编码标准,用于 将文本字符映射到数值ASCII 最早🤞在计算机领域中广泛使用,它定义了 128 个不同的字符,包括 控制字符(如换行和回车) 以及 可打印字符(如字母、数字、标点符号等)。ASCII 定义的每个字符都被分配了一个 唯一的整数值,范围从 0127

注:

  1. 世界上存在许多的编码方案,但这些方案大多是 基于 ASCII 编码进行扩展的🌹,因此 ASCII 编码也被认为是 字符编码的基础
  2. 扩展 ASCII 字符集利用了单个字节中的空余二进制位,将 ASCII 字符提升到了 256 个之多。

Base16 编码

概念

Base16 编码是一种将二进制数据转换为文本表示的编码方式,它使用 16个字符中的一个 来表示 二进制数值中的 4 个二进制位
在 Base16 编码中,被用于编码的字符与十六进制数值所使用的字符相同,故 Base16 编码又被称为 十六进制编码

Base16 字符集

Base16 字符集 是指用于 Base16 编码 的字符集,由 0 ~ 9 和 A ~ F 共十六个字符组成。

Base16 编码原理

编码

  1. 获取字符在其所属编码系统中的二进制表示

由于 编码是基于字符在其所属编码系统中对应的二进制数进行的,故在对字符进行编码前需要先获取该字符的二进制表示。

  1. 将二进制数值按照一定的规则进行拆分(方便后续第三步的进行)

在计算机中,一个字节由 8 个二进制位 组成,每一个二进制位可以是 01。当我们使用 十六进制 来表示这 8 位时,我们实际上是将这 8 个二进制位 拆分为两个 4 位二进制数。每个 4 位二进制数部分可以表示 从 0 到 15 2 4 2^4 24)的数字,这恰好对应于 Base16 中的 16 个字符。

  1. 由二进制数值到 Base16 编码

将拆分的 4 个二进制位转化为十进制数值(便于和 Base16 字符集进行对比,如果对二进制比较熟悉可以省略这一步) 并依据 Base16 编码表进行 对比替换

举个栗子

ASCII 文本(通过 ASCII 在计算机中存储的字符组成的文本) Hel 在经过 Base16 编码后得到结果 48656C

注:

  1. 在将数据转化为 Base16 编码的过程中,获取其 ASCII 值并不是必须的。除 ASCII 字符外的字符(如中文)也可以进行 Base16 编码,由于 编码是针对二进制数据进行的,故对字符进行编码前首先得先知道该字符 在其所使用的编码系统中使用怎样的二进制数据进行存储

  2. 对使用 Base16 进行编码后的数据可以通过 Base16 编码的逆过程 实现 Base16 的解码。

Base16 编码特点

体积膨胀

由于在对字符进行 Base16 编码的过程中,使用 一个字节存储的 ASCII 字符需要使用两个同属于 ASCII 字符的 Base16 字符进行表示。故在将文本进行 Base16 编码后,编码后得到的文本将占据原来的 两倍 之多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1118514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git Bash(一)Windows下安装及使用

目录 一、简介1.1 什么是Git?1.2 Git 的主要特点1.3 什么是 Git Bash? 二、下载三、安装3.1 同意协议3.2 选择安装位置3.3 其他配置(【Next】 即可)3.4 安装完毕3.5 打开 Git Bash 官网地址: https://www.git-scm.com/…

【C++】特殊类实现

一、请设计一个类,不能被拷贝 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝, 只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98 将拷贝构造函数与赋值运算符重载只声明不定义…

聚类分析 | Python密度聚类(DBSCAN)

密度聚类是一种无需预先指定聚类数量的聚类方法,它依赖于数据点之间的密度关系来自动识别聚类结构。 本文中,演示如何使用密度聚类算法,具体是DBSCAN(Density-Based Spatial Clustering of Applications with Noise)来…

磁盘清理 | 已经卸载的软件还出现在应用和功能里怎么办?

一句话总结解决方法: 安装Geek Uninstaller,删除卸载残留。 问题描述: 最近磁盘满了,需要删除一些平时不常用的软件,但是发现一个问题。就是已经删除的软件,仍然会出现在“应用与功能”中。并且显示卸载图标为灰色&am…

基于PHP的线上购物商城,MySQL数据库,PHPstudy,原生PHP,前台用户+后台管理,完美运行,有一万五千字论文。

目录 演示视频 基本介绍 论文截图 功能结构 系统截图 演示视频 基本介绍 基于PHP的线上购物商城,MySQL数据库,PHPstudy,原生PHP,前台用户后台管理,完美运行,有一万五千字论文。 现如今,购物网站是商业…

用Python进行websocket接口测试

这篇文章主要介绍了用Python进行websocket接口测试,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 我们在做接口测试时,除了常见的http接口,还有一种比较多见,就是socket接口,今天讲解下怎么用P…

(一)docker:建立oracle数据库

前言,整个安装过程主要根据docker-images/OracleDatabase/SingleInstance /README.md ,里边对如何制作容器讲的比较清楚,唯一问题就是都是英文,可以使用谷歌浏览器自动翻译成中文,自己再对照英文相互参照来制作提前准备…

P1 缓冲池管理

文章目录 Task1 LRU-K 替换策略Task2 缓冲池管理Task3 读/写页面保护 Task1 LRU-K 替换策略 LRU-K算法:当访问次数达到K次后,将数据索引从历史队列移到缓存队列中(缓存队列时间降序);缓存数据队列中被访问后重新排序&…

Python--循环中的两大关键词 break 与 continue

在Python循环中,经常会遇到两个常见的关键词:break 与 continue break:代表终止整个循环结构 continue:代表中止当前本次循环,继续下一次循环 break: 英 /breɪk/ v. 打破,打碎&#xff0c…

c语言练习95:练习使用双向链表(实现增删改查)

练习使用双向链表&#xff08;实现增删改查&#xff09; 是指针指向了一块被释放的空间 解决方案&#xff1a; plistNULL List.h #pragma once #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<…

java实现多线程下载器

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;项目专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

2316. 统计无向图中无法互相到达点对数(leetcode)并查集-------------------Java实现

2316. 统计无向图中无法互相到达点对数&#xff08;leetcode&#xff09;并查集-------------------Java实现 题目表述 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i…

使用IDEA时遇到java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver报错的解决方案

目录 一、项目环境二、可能原因解决方案1. 没有导入mysql的jar包2. mysql的jar包版本问题 一、项目环境 二、可能原因解决方案 1. 没有导入mysql的jar包 先检查项目lib文件夹下有没有mysql的jar包&#xff0c;没有就把jar包复制到该目录下 再检查项目结构中有没有导入mysql…

使用vscode搭建虚拟机

首先vscode插件安装 名称: Remote - SSH ID: ms-vscode-remote.remote-ssh 说明: Open any folder on a remote machine using SSH and take advantage of VS Codes full feature set. 版本: 0.51.0 VS Marketplace 链接: https://marketplace.visualstudio.com/items?it…

掌握 C++ 中 static 关键字的多种使用场景

static是什么 在最开始C中引入了static关键字可以用于修饰变量和函数&#xff0c;后来由于C引入了class的概念&#xff0c;现在static可以修饰的对象分为以下5种&#xff1a; 成员变量&#xff0c;成员函数&#xff0c;普通函数&#xff0c;局部变量&#xff0c; 全局变量 s…

vmware安装 Rocky9(自定义分区安装)

一、下载镜像 访问官网&#xff0c;下载dvd的镜像 Download Rocky | Rocky Linuxhttps://rockylinux.org/download 二、新建vmware虚拟机 1、vmware尽量选择vmware17 2、下一步 3、稍后安装 4、选择系统类型&#xff1a;red hat9 5、自定义安装位置 6、根据电脑配置&#…

动画系统的前世今生(一)

掐指一算&#xff0c;五年没更新过我的CSDN账号啦&#xff0c;方向也从人工智能变成了计算机图形学&#xff0c;当然也依旧会关注AI的发展&#xff0c;之前在知乎上写了一些文章[传送门]&#xff0c;后续也会逐渐同步到CSDN上&#xff5e; 这个系列将包含五篇文章&#xff0c;内…

allegro中shape的一些基本操作(二)——铜皮添加网络、合并shape

给铜皮&#xff08;shape&#xff09;添加网络 例如下图&#xff0c;想要给这个新添加的shape添加到GND的网络&#xff0c;可以先选中这个shape&#xff0c;让其进入shape编辑模式&#xff0c;然后再右键点击&#xff0c;最后再PCB上点击GND网络 选中铜皮后在铜皮上右键&…

字典树学习笔记

trie 树&#xff0c;即字典树&#xff0c;是一种可以实现 O ( S ) O(S) O(S) 的预处理&#xff08; S S S 为所有字符串的长度和&#xff09;&#xff0c; O ( N ) O(N) O(N)&#xff08; N N N 为查询的字符串的长度&#xff09;的查询的数据结构。 举个栗子&#xff0c;对于…

Rust-后端服务调试入坑记

这篇文章收录于Rust 实战专栏。这个专栏中的相关代码来自于我开发的笔记系统。它启动于是2023年的9月14日。相关技术栈目前包括&#xff1a;Rust&#xff0c;Javascript。关注我&#xff0c;我会通过这个项目的开发给大家带来相关实战技术的分享。 如果你关注过我的Rust 实战里…