2 回答

TA贡献1868条经验 获得超4个赞
假设它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 操场上),则此代码会输出。

TA贡献1876条经验 获得超7个赞
您可以使用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
- 2 回答
- 0 关注
- 279 浏览
添加回答
举报