Преобразовать байтовый массив [] в uintptr - PullRequest
0 голосов
/ 01 февраля 2020

Как я могу преобразовать следующий байтовый массив в uintptr? (не uint32 или uint64):

arr := []byte{0xda, 0xcc, 0xd9, 0x74, 0x24, 0xf4}

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Предполагая, что uintptr является 64-битным, и что вам нужна кодировка с прямым порядком байтов, вы можете довольно легко создать правильное значение, даже не углубляясь в пакет binary стандартной библиотеки.

package main

import "fmt"

func main() {
    arr := []byte{0xda, 0xcc, 0xd9, 0x74, 0x24, 0xf4}
    var r uintptr
    for _, b := range arr {
        r = (r << 8) | uintptr(b)
    }
    fmt.Printf("%x", r)
}

Этот код выводит daccd97424f4, если вы используете 64-битную версию int go (а не, например, на go детской площадке).

1 голос
/ 01 февраля 2020

Вы можете использовать encoding.binary пакет:

arr := []byte{0xda, 0xcc, 0xd9, 0x74, 0x24, 0xf4}

for i := 0; i < 8 - len(arr); i++ {
    arr = append([]byte{0x0, 0x0}, arr...) // for not to get index out of range
}
ptr := binary.BigEndian.Uint64(arr)
fmt.Printf("0x%x\n", uintptr(ptr))

https://play.golang.org/p/QFUVlIFdLZL

...