gpt4 book ai didi

algorithm - 如何将10个字节转换为数字uint16并从数字还原数组

转载 作者:行者123 更新时间:2023-12-01 22:36:35 25 4
gpt4 key购买 nike

我尝试在数组中容纳两个地址和一个端口,然后,如代码所示,将其转换为uint16进行进一步的工作,但在输出中未获得所需的结果。
我知道我的代码中只有4个字节,并且需要反转10个字节。

 s, d := net.IP{172, 16, 100, 11}, net.IP{10, 0, 88, 11}
var sp uint16 = 54876
//var dp uint16 = 445

var spByte = make([]byte, 2)
binary.BigEndian.PutUint16(spByte, sp)

var x = make([]byte, 10) // [172 16 100 11 10 0 88 11 214 92]
copy(x[:4], s)
copy(x[4:], d)
copy(x[8:], spByte)

ret := binary.BigEndian.Uint32(x)

var a, z uint16
a = uint16(ret >> 16)
z = uint16(ret & 0xFFFF)

newret := (uint32(a) << 16) | uint32(z)


var xs = make([]byte,10) // [172 16 100 11 0 0 0 0 0 0]
binary.BigEndian.PutUint32(xs,newret)

我试图从数组中获取一个数字[172 16 100 11 10 0 88 11 214 92],然后从相同的数字恢复给定的数组。

最佳答案

使用以下代码打包和解压缩 byte slice 段中的值:

s, d := net.IP{172, 16, 100, 11}, net.IP{10, 0, 88, 11}
var sp uint16 = 54876

var x = make([]byte, 10) // [172 16 100 11 10 0 88 11 214 92]
copy(x[:4], s)
copy(x[4:], d)
binary.BigEndian.PutUint16(x[8:], sp)

s2 := binary.BigEndian.Uint32(x)
d2 := binary.BigEndian.Uint32(x[4:])
sp2 := binary.BigEndian.Uint16(x[8:])

fmt.Printf("s: %x %x\n", []byte(s), s2)
fmt.Printf("d: %x %x\n", []byte(d), d2)
fmt.Printf("sp: %d %d\n", sp, sp2)

在GoLang PlayGround上尝试: https://play.golang.org/p/MFzdVtyoBsm

关于algorithm - 如何将10个字节转换为数字uint16并从数字还原数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61516914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com