首页 > 解决方案 > 如何使用 Golang 移位十六进制值?

问题描述

假设我有一个值为 的字符串4ADDF6C259EBAFF8

使用这个我想得到一个时间戳,使用公式(hex(val) >> 25) + 1008000400

使用encoding/hex包,我想出了以下内容:

srcBytes := []byte(src)
dst := make([]byte, hex.EncodedLen(len(srcBytes)))
hex.Encode(dst, srcBytes)

在此之后,我需要一种位移dst25 次的方法,然后添加一个常数。

不过dst是类型[]byte

我需要它是类型hex,这样我就可以在之后移位。我如何转换[]byte以便可以移动它?

标签: gohexbit-manipulation

解决方案


假设您的输入字符串不同但最多有 16 个十六进制数字,您只需转换为 64 位(无符号)整数并进行数学运算。我还在你的常量前面加上0x假设它是十六进制的(根据数字判断)。

  s := "4ADDF6C259EBAFF8"
  if i, err := strconv.ParseUint(s, 16, 64); err == nil {
    fmt.Printf("%x\n", i >> 25 + 0x1008000400)
  }

BTW hex不是一种类型,而是一种显示整数的方式。


推荐阅读