Arrays 如何在Go中混合使用十六进制和字符串创建字节数组?
我正在尝试实现此处指定的数据: 我正在创建一个字节数组,该数组需要如下所示:Arrays 如何在Go中混合使用十六进制和字符串创建字节数组?,arrays,go,Arrays,Go,我正在尝试实现此处指定的数据: 我正在创建一个字节数组,该数组需要如下所示: 0xFF 0xFF 0xFF 0xFF 0x54 0x53 0x6F 0x75 0x72 0x63 0x65 0x20 0x45 0x6E 0x67 0x69 0x6E 0x65 0x20 0x51 0x75 0x65 0x72 0x79 0x00 分解后,它只是标头中的一些字节: 0xFF 0xFF 0xFF 0xFF 0x54 然后,以零结尾的字符串源引擎查询 我能够以一种非常丑陋的方式让它工作,但我知道必须有
0xFF 0xFF 0xFF 0xFF 0x54 0x53 0x6F 0x75 0x72 0x63 0x65 0x20 0x45 0x6E 0x67 0x69 0x6E 0x65 0x20 0x51 0x75 0x65 0x72 0x79 0x00
分解后,它只是标头中的一些字节:
0xFF 0xFF 0xFF 0xFF 0x54
然后,以零结尾的字符串源引擎查询
我能够以一种非常丑陋的方式让它工作,但我知道必须有一条更干净的道路:
message := []byte("xxxxxSource Engine Queryx")
message[0] = 0xFF
message[1] = 0xFF
message[2] = 0xFF
message[3] = 0xFF
message[4] = 0x54
message[24] = 0x00
我尝试过使用这样的切片,但我不知道如何将其用于非字符串值:
message := make([]byte, 25)
copy(message[5:], "Source Engine Query")
这是可行的,但我不知道如何将0xFF 0xFF 0xFF 0xFF 0x54添加到开头。经过长时间的研究,我在这里问了之后,当然明白了
message := []byte("\xff\xff\xff\xff\x54Source Engine Query\x00")
这很好用。我在这里找到的:
在其他方法中,它也是bytes.Buffer,速度非常快,并且有两种简便的方法
message := bytes.NewBuffer([]byte{0xFF, 0xFF, 0xFF, 0xFF, 0x54})
message.WriteString("Source Engine Query")
message.WriteByte(0x00)
message.WriteTo(os.Stdout) //or write to some other io.Writer you want, say net.Conn