为了账号安全,请及时绑定邮箱和手机立即绑定

将 []byte 数组转换为 uintptr

将 []byte 数组转换为 uintptr

Go
长风秋雁 2022-05-10 17:07:08
如何将以下字节数组转换为 uintptr?(不是 uint32 或 uint64):arr := []byte{0xda, 0xcc, 0xd9, 0x74, 0x24, 0xf4}
查看完整描述

2 回答

?
MYYA

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 操场上),则此代码会输出。


查看完整回答
反对 回复 2022-05-10
?
幕布斯6054654

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


查看完整回答
反对 回复 2022-05-10
  • 2 回答
  • 0 关注
  • 279 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号