Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 将字节数组的一部分转换为uint16的最简单方法_Go - Fatal编程技术网

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上不起作用,除非他们最近做了一些改变。但是,出于性能原因,您始终可以两次实现该功能,一次“安全”,一次不安全。例如