Как сдвинуть битовое значение с помощью Golang? - PullRequest
0 голосов
/ 03 июня 2019

Допустим, у меня есть строка со значением 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, чтобы его можно было сдвинуть?

1 Ответ

0 голосов
/ 04 июня 2019

Предполагая, что ваша входная строка изменяется, но имеет максимум 16 шестнадцатеричных цифр, вы просто конвертируете в 64-битное (без знака) целое число и выполняете математические вычисления. Я также добавил к вашей константе 0x , предполагая, что она шестнадцатеричная (судя по цифрам).

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

BTW hex - это не тип, а способ отображения целых чисел.

...