go - 如何使用 Golang 移位十六进制值?
问题描述
假设我有一个值为 的字符串4ADDF6C259EBAFF8
。
使用这个我想得到一个时间戳,使用公式(hex(val) >> 25) + 1008000400
。
使用encoding/hex
包,我想出了以下内容:
srcBytes := []byte(src)
dst := make([]byte, hex.EncodedLen(len(srcBytes)))
hex.Encode(dst, srcBytes)
在此之后,我需要一种位移dst
25 次的方法,然后添加一个常数。
不过dst
是类型[]byte
。
我需要它是类型hex
,这样我就可以在之后移位。我如何转换[]byte
以便可以移动它?
解决方案
假设您的输入字符串不同但最多有 16 个十六进制数字,您只需转换为 64 位(无符号)整数并进行数学运算。我还在你的常量前面加上0x假设它是十六进制的(根据数字判断)。
s := "4ADDF6C259EBAFF8"
if i, err := strconv.ParseUint(s, 16, 64); err == nil {
fmt.Printf("%x\n", i >> 25 + 0x1008000400)
}
BTW hex不是一种类型,而是一种显示整数的方式。
推荐阅读
- python-3.x - PyQt5:pyqtSignals 线程安全吗?
- c# - Type.GetTypeFromProgID(string) 在其他机器上不起作用
- python-3.x - 值更改时拆分时间序列数据帧
- visual-studio-code - 在 VSCode Fortran 调试中检查从另一个模块导入的变量
- wsl-2 - 在 Windows 上使用 com2tcp-rfc2217.bat 并通过 WSL2 (ESP8266) 上传到 COM5 和 platform.io 不工作
- java - 使用 swagger open api 下载文件
- flutter - 如何在flutter中将本地资产pdf文件上传到服务器?
- android - 在@capacitor-community/admob 中找不到广告的发布商数据
- java - 我的测试用例通过但运行计数显示为 0
- python - 使用熊猫计算日期之间的天数