首页 > 其他分享 >Hex编码详解

Hex编码详解

时间:2022-11-08 10:11:06浏览次数:32  
标签:编码 存储 字符 Hex 0110 详解 1Byte

最近准备把常用的密码学相关的一些算法都过一遍,先从最简单的 Hex 编码开始吧
在我自己学习的过程中,看过别人的文章,自己也看过源码,发现有些文章的介绍是有问题的
所以我这里会讲的更细致一些,尽量通俗易懂
但我也不会像讲计算机基础那样,细枝末节的知识就略过了

基础

计算机存储数据,大部分时候都是以字节为单位的,我们这里称为 1Byte

但是实际上 1Byte 还可以分的更细,即分为 8 个 bit 位

bit 位应该大家都熟悉了,1bit 只能存储 0 或者 1

那么 8bit 能存储数据的范围就是 0000'0000~1111'1111 ,转换成 10 进制就是 0~255

因为编码的时候只管这 8bit 里的 2 进制值

另外有个地方很多人会混淆的,就是 1Byte 存储数值和存储字符的时候,底层实际的值是不一样的

比如存储数值 1 的时候,1Byte 中的 8 bit 值是 0000'0001

存储字符 "1" 的时候,1Byte 中的 8 bit 值是 0011'0001

Hex 编码

Hex 编码是将数据转换成符合 Intel Hex 文件格式的一种编码方式

Hex 编码的最小单位是 1Byte 也即 8 个 bit 位

算法

  1. 将 1Byte 分成高 4bit 和低 4bit
  2. 算出高 4bit 对应的 16 进制数值,这里记为数值 a
  3. 找出这个数值 a 对应的字符 "a"
  4. 找出这个字符 "a" 对应的 ascii 码,这个 ascii 码是 8bit 的,也即 1Byte
  5. 通过相同的方法找出低 8bit 算出来的 ascii 码
  6. 将上面算出来的 2 个 Byte 拼在一起就得到编码后的 2Byte 数据

特点

  1. Hex 编码后的数据大小是原来的 2 倍
  2. 由于算法内部是对 4bit 进行转换,所以编码后的数据从显示上来看是由 0~F 这 16 个字符组成

我们来看两个例子:

Byte 存储实际数值的情况:

假定有 1Byte,里面存放的数值是十进制 226
那么它存储的 8 位二进制值是 1110'0010
高4位是 1110
低4位是 0010
Hex编码的时候,先取高 4 位 1110 转成十六进制的 e ,然后去寻找字符 "e" 对应的 ascii 码,即为 0110'0101
再取低 4 位 0010 转成十六进制的 2 ,然后去寻找字符 "2" 对应的 ascii 码,即为 0011'0010
最终转换后的数据是 0110'0101 0011'0010
按照字符串显示就是 e2


Byte 存储字符的情况:

假定有 1Byte,里面存放的是字符 "g"
那么它存储的 8 位二进制值是 0110'0111
高4位是 0110
低4位是 0111
Hex编码的时候,先取高 4 位 0110 转成十六进制的 6 ,然后去寻找字符 "6" 对应的 ascii 码,即为 0011'0110
再取低 4 位 0111 转成十六进制的 7 ,然后去寻找字符 "7" 对应的 ascii 码,即为 0011'0111
最终转换后的数据是 0011'0110 0011'0111
按照字符串显示就是 67
转载自:https://zhuanlan.zhihu.com/p/446140030

标签:编码,存储,字符,Hex,0110,详解,1Byte
From: https://www.cnblogs.com/dier-gaohe/p/16868723.html

相关文章

  • kubernetes之kubectl与YAML详解1
      k8s集群的日志,带有组件的信息,多看日志。 kubectl命令汇总kubectl命令汇总kubectl命令帮助信息[root@mcwk8s04~]#kubectl-hkubectlcontrolstheKuberne......
  • threadlocal源码详解&内存泄漏分析
    juc基础之ThreadlocalThreadlocal底层原理get方法源码public T get() {    Thread t = Thread.currentThread();    ThreadLocalMap map = getMap......
  • springboot整合nacos config详解
    springboot整合nacos详解@value:读取application文件@ConfigurationProperties:读取指定文件@PropertySource:自定义文件引入@PropertySource+@Value:读取自定义文件@Pro......
  • jvm双亲委派机制详解
    双亲委派机制​ 记录一下JVM的双亲委派机制学习记录。类加载器种类​ 当我们运行某一个java类的main方法时,首先需要由java虚拟机的类加载器将我们要执行的main方法所......
  • boostrap.yml 与 application.yml 详解
    boostrap.yml与application.yml详解​ 官方解释:SpringBoot中有两种上下文,bootstrap和applicationbootstrap:应用程序的父上下文,即bootstrap加载优先于applicato......
  • 网络协议之:redis protocol 详解
    目录简介redis的高级用法Redis中的piplineRedis中的Pub/SubRESPprotocolSimpleStringsBulkStringsRESPIntegersRESPArraysRESPErrorsInlinecommands总结简介redis......
  • 多线程详解
    1.多线程快速入门1.1进程与线程什么是进程?CPU从硬盘中读取一段程序到内存中,该执行程序的实例就叫做进程。一个程序如果被CPU多次读取到内存中,则变成多个独立的进程......
  • 2022最全Hbuilder打包成苹果IOS-App的详解
      本文相关主要记录一下使用Hbuilder打包成苹果IOS-App的详细步骤。介绍一下个人开发者账号:再说下什么是免费的苹果开发者账号,就是你没交688年费的就是免费账号,如果......
  • Hexo主题next中添加天气插件(心知天气)
    最近想在博客主题中添加一个天气插件,在网上搜索一番以后选择了【心知天气】。实现在博客中预报天气的效果。首先要去心知天气的官网,获取插件代码,具体方式可以参见【官方文......
  • Vue 3.x 的 script setup 语法糖用法详解
    由于原来vue3中的setupCompositionAPI语法太过于冗长麻烦,官方又出了这么个语法糖,非常的好用了。这里介绍一些常用的语法:一、如何开始使用?1、需要关闭vetur插件,安装Vol......