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