详解go的hex.Encode原理

简言

今天看nsq的messageID生成的时候,发现它使用了hex.Encode函数来产生编码,那就顺道研究一下这个编码方式。

原理

hex是16进制的意思,encode是进行编码的意思,内部实现也很简单,就是

每4位计算出十六进制的值,因为4位二进制范围0000 ~ 1111,也就是在0~15之间,用16进制来表示即0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f    取这些字符对应的ASCII码的二进制即可

而且,大家如果按照16进制来显示这些转换后的字节数组,会发现范围都是在0~9 a~f

很明显这种把1个字节分两步,按照每4位来转换成1个字节,最终形成2个字节的方式,相比原来,编码结果是翻倍

举例:原本有1个字节的内容是 00010111,现在进行hex.Encode操作

先把前面的0001计算出十六进制,也就是1,字符1对应的ASCII码表中是0011 0001

再把后面的0111计算出十六进制,也就是7,字符7对应的ASCII码表中是0011 0111

一通操作下来,原来一个字节就变成了两个字节

hex.Encode就是遍历给定的字节数组,把每个字节都这样处理

我们再举个代码的例子(对4个字节进行Encode,会发现得到了8个字节)

package main
import ("encoding/hex""fmt"
)
func main() {// 原来的字节数组,4字节src := []byte{1, 11, 226, 'H'}// 结果的字节数组,其实8字节就够,这里特意搞了10个字节,大家会发现后面两个字节没变dest := []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}hex.Encode(dest, src)for i := 0; i < len(dest); i++ {fmt.Printf("dest[%d]=%v \n", i, dest[i])}
}

运行结果如下图

先给大家贴出来ASCII码表

贴出来源字符串

src := []byte{1, 11, 226, 'H'}

解释下上面代码的转换过程

第一个字节,src中是1,二进0000 0001,转换过程如下

高4位的0000计算出十六进制的值,也就是0,在ASCII码表中字符0对应48

低4位的0001计算出十六进制的值,也就是1,在ASCII码表中字符1对应49

第二个字节,src中是11,二进制0000 1011,转换过程如下

高4位的0000计算出十六进制的值,也就是0,在ASCII码表中字符0对应48

低4位的1011计算出十六进制的值,也就是b,在ASCII码表中字符b对应98

第三个字节,src中是226,二进制1110 0010,转换过程如下

高4位的1110计算出十六进制的值,也就是e,在ASCII码表中字符e对应101

低4位的0010计算出十六进制的值,也就是2,在ASCII码表中字符2对应50

第四个字节,src中是'H',二进制0100 1000,转换过程如下

高4位的0100计算出十六进制的值,也就是4,在ASCII码表中字符4对应52

低4位的1000计算出十六进制的值,也就是8,在ASCII码表中字符8对应56

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

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

相关文章

mac最好用的解压缩工具,支持tar,rar,zip,ios,exe,msi等多种格式

mac系统最好用的压缩工具&#xff0c;支持多种文件压缩格式&#xff0c;甚至你想不到的压缩格式都支持 The Unarchiver&#xff0c;官网地址 包括gui版和命令行版本 不需要gui版本的&#xff0c;可以直接命令安装brew install unar unar使用方法&#xff1a; unar 压缩文件…

基于Python机器学习、深度学习在气象、海洋、水文等技能提升教程

详情点击链接&#xff1a;基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用 前言 Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。…

数据可视化(1)

使用python带的matplotlib库进行简单的绘图。使用之前先进行安装&#xff0c;pip install matplotlib。如果安装了Anaconda,则无需安装matplotlib。 1.简单折线图 #绘制简单图表 import matplotlib.pyplot as plt plt.plot([1,2,3,4,5]) plt.show() import matplotlib.pyp…

iOS原生 输入框短信自动填充多遍 原生解决办法

短信自动填充 只有当输入框text无值的时候才会显示 所以不需要考虑这种情况 监听输入框内容变化的其中两种方法 1. [[NSNotificationCenter defaultCenter] addObserver:self selector:selector(textChange123:) name:UITextFieldTextDidChangeNotification object:nil]; 2. …

2023年的深度学习入门指南(19) - LLaMA 2源码解析

2023年的深度学习入门指南(19) - LLaMA 2源码解析 上一节我们学习了LLaMA 2的补全和聊天两种API的使用方法。本节我们来看看LLaMA 2的源码。 补全函数text_completion源码解析 上一节我们讲了LLaMA 2的编程方法。我们来复习一下&#xff1a; generator Llama.build(ckpt_di…

logback-spring.xml日志配置文件详解

目录 前言logback-spring.xml 配置 前言 打印日志是一个系统的基本功能&#xff0c;系统出现异常可以通过查找日志弄清楚是什么原因&#xff0c;从而更加快速地定位问题&#xff0c;修复系统。 logback-spring.xml 配置 文件位置 具体配置 <?xml version"1.0"…

MGRE实验

实验步骤 第⼀步&#xff1a;IP地址规划 PC地址 设备地址 第⼆步&#xff1a;配置IP地址 R1配置 [R1]interface g0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 24 [R1]interface s4/0/0 [R1-Serial4/0/0]ip address 15.1.1.1 24 R2配置 [R2]interface g0/0/…

TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?

TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以? 1. 什么是TCP协议? TCP&#xff1a;Transmission Control Protocol翻译过来就是传输控制协议,TCP协议是一个面向连接的、可靠的、基于字节流的传输层协议RFC 793对TCP连接的定义 > Connections: >…

Windows 在VMware16.x安装Win11系统详细教程

文章目录 一、准备二、创建虚拟机1. 创建新的虚拟机2. 选择虚拟机硬件兼容性3. 安装客户机操作系统4. 选择客户机操作系统5. 命名虚拟机6. 固件类型7. 处理器配置8. 此虚拟机内存9. 网络类型10. 选择I/O控制器类型11. 选择磁盘类型12. 选择磁盘13. 指定磁盘容量14. 指定磁盘文件…

Centos7.6安装RocketMQ4.9.2并配置开机自启

1、下载RocketMQ 编译后的压缩包 wget https://dlcdn.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip2、解压 unzip rocketmq-all-4.9.2-bin-release.zip3、进入解压文件夹 cd rocketmq-all-4.9.2/4、编辑配置文件/usr/local/rocketmq/rocketmq-all-4.9.4-…

Docker-Compose 轻松搭建 Grafana+InfluxDb 实用 Jmeter 监控面板

目录 前言&#xff1a; 1、背景 2、GranfanaInfluxDB 配置 2.1 服务搭建 2.2 配置 Grafana 数据源 2.3 配置 Grafana 面板 3、Jmeter 配置 3.1 配置 InfluxDB 监听器 3.2 实际效果 前言&#xff1a; Grafana 和 InfluxDB 是两个非常流行的监控工具&#xff0c;它们可…

Java网络编程(一)基本网络概念

一、网络 网络(network) 是几乎可以实时相互发送和接收数据的计算机和其他设备的集合。网络通常用线缆连接&#xff0c;数据位转换为电磁波&#xff0c;通过线缆移动。不过&#xff0c;无线网络会通过无线电波传输数据&#xff0c;许多长距离的传输现在会用通过玻璃纤维发送可见…

生信专题十余种案例

集成多组学数据的机器学习在生物医学中的应用 原文链接 案例部分图示&#xff1a; 案例图示一&#xff1a;基于自编码器的单细胞转录组-蛋白组学整合分析 案例图示二&#xff1a;基于蛋白组学-代谢组学的肿瘤生物标志物发现 案例图示三&#xff1a;基于GWAS-表型组学的肺癌风…

URL中有%20报错 forbidden 403禁止错误

场景&#xff1a; 网站&#xff1a;www.abc.com/s/搜索key 名字&#xff0c;能正常访问&#xff08;名字和key 中间有空格&#xff09; 转义后的URL&#xff1a;www.abc.com/s/搜索key%20名字。 后来莫名其妙的就不能访问了&#xff0c;报Forbidden 错误&#xff0c;程序一直…

vscode ssh插件连接本地linux失败

新版本的vscode连接本地虚拟机中的linux失败&#xff0c;一直处于retry密码状态&#xff0c;浏览cpp代码不方便&#xff0c;处理方法如下&#xff1a; 1.打开远程机器上面的~/.vscode-server/bin目录下面找到commit 如784b0177c56c607789f9638da7b6bf3230d47a8c 2.在外网机器…

记一次与挖矿木马的较量

一、 概述 本文主要是记录了一次针对 挖矿程序 的应急响应处理&#xff0c;从三个部分来解读此次事件&#xff1a; 1、事件描述部分&#xff0c;确认是否有挖矿程序。 2、现场分析部分&#xff0c;讲了是如何一步一步杀掉挖矿程序。 3、程序分析部分&#xff0c;针对挖矿脚本的…

Keras 初级教程:深度学习的开始

Keras 是一个用于构建和训练深度学习模型的高级接口&#xff0c;它可以运行在多种底层引擎上&#xff0c;如 TensorFlow、CNTK 或 Theano。Keras 的核心数据结构是“模型”&#xff0c;模型是一种组织网络层的方式。Keras 中主要的模型是 Sequential 模型和函数式 API 模型。在…

腾讯云GPU云服务器CPU是什么?主频多少?

腾讯云CPU云服务器CPU型号、主频多少&#xff1f;GPU渲染型GA3实例CPU采用2.55GHz主频AMD EPYCTM Milan 处理器&#xff0c;渲染型GNV4实例采用Intel Xeon Cooper Lake 处理器&#xff0c;基频 3.4 GHz&#xff0c;睿频3.8 GHz&#xff0c;腾讯云服务器网分享腾讯云GPU服务器CP…

客户案例 | 思腾合力服务器助力西安电子科技大学人工智能实验室建设

客户介绍 西安电子科技大学是以信息与电子学科为主&#xff0c;工、理、管、文多学科协调发展的全国重点大学&#xff0c;直属教育部&#xff0c;是国家“优势学科创新平台”项目和“211工程”项目重点建设高校之一、国家双创示范基地之一、首批35所示范性软件学院、首批9所示范…