英文:
Easiest way to covert part of a byte array to uint16
问题
如果我有一个字节数组:
byte_array := []byte("klm,\x15\xf1\n")
我想将字节\x15和\xf1以LittleEndian顺序转换为uint16。最简单的方法是什么?
我尝试了以下代码:
var new_uint uint16
buff := bytes.NewReader(byte_array[4:6])
err = binary.Read(buff, binary.LittleEndian, &new_uint)
但是我一直得不到结果,而且这个方法相对复杂,有没有更简单的方法?
谢谢...
英文:
if I byte array:
byte_array := []byte("klm,\x15\xf1\n")
I would like to the byte \x15 and \xf1 to uint16 in LittleEndian order. What is the easiest way of doing it?
Tried the following:
var new_uint uint16
bff := bytes.newRead(byte_array[4:5])
err = binary.Read(buff, binary.LittleEndian, &new_uint)
but I keep getting nothing, and this is relatively complicated, is there an easier way of doing it?
Thanks...
答案1
得分: 11
你有两个选择,使用像你已经做的那样的binary.LittleEndian,一个更简短的方法是:
u16 := binary.LittleEndian.Uint16(byte_array[4:])
或者如果你喜欢冒险,你可以使用unsafe:
// 这将在BE系统上返回错误的数字,
// 并且unsafe在GAE上不可用。
u16 := *(*uint16)(unsafe.Pointer(&byte_array[4]))
[kbd]playground[/kbd]
英文:
You have 2 options, using binary.LittleEndian like you already did, a shorter way is:
u16 := binary.LittleEndian.Uint16(byte_array[4:])
Or if you like to live dangerously, you can use unsafe:
// This will return the wrong number on a BE system,
// also unsafe is not available on GAE.
u16 := *(*uint16)(unsafe.Pointer(&byte_array[4]))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论