Go 将字节数组的一部分转换为uint16的最简单方法
如果我使用字节数组:Go 将字节数组的一部分转换为uint16的最简单方法,go,Go,如果我使用字节数组: byte_array := []byte("klm,\x15\xf1\n") 我想将字节\x15和\xf1按小印度顺序转换为uint16。最简单的方法是什么 尝试了以下操作: var new_uint uint16 bff := bytes.newRead(byte_array[4:5]) err = binary.Read(buff, binary.LittleEndian, &new_uint) 但我一直一无所获,这是相对复杂的,有没有更简单的方法 谢谢…您
byte_array := []byte("klm,\x15\xf1\n")
我想将字节\x15和\xf1按小印度顺序转换为uint16。最简单的方法是什么
尝试了以下操作:
var new_uint uint16
bff := bytes.newRead(byte_array[4:5])
err = binary.Read(buff, binary.LittleEndian, &new_uint)
但我一直一无所获,这是相对复杂的,有没有更简单的方法
谢谢…您有两个选项,使用binary.LittleEndian,就像您已经使用的一样,一个较短的方法是:
u16 := binary.LittleEndian.Uint16(byte_array[4:])
或者,如果您喜欢危险地生活,您可以使用不安全的:
// This will return the wrong number on a BE system,
// also unsafe is not available on GAE.
u16 := *(*uint16)(unsafe.Pointer(&byte_array[4]))
我只想指出第二种方法,它在appengine上不起作用,它会在bigendian cpu上给你错误的数字,但对于uint64来说,它的速度要快得多,甚至一点都不好笑。我认为appengine上的不安全是不安全的,不是吗?@DavidBudworth不安全就我所知在gae上不起作用,除非他们最近做了一些改变。但是,出于性能原因,您始终可以两次实现该功能,一次“安全”,一次不安全。例如