我正在尝试实现此处指定的数据:
https://developer.valvesoftware.com/wiki/Server_queries#Request_Format
我正在创建一个最终需要看起来像这样的字节数组:
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
分解,它只是 header 中的一些字节:
0xFF 0xFF 0xFF 0xFF 0x54
然后是零终止字符串“Source Engine Query”。
我能够以一种非常丑陋的方式让它工作,但我知道必须有一条更干净的路径:
message := []byte("xxxxxSource Engine Queryx")
message[0] = 0xFF
message[1] = 0xFF
message[2] = 0xFF
message[3] = 0xFF
message[4] = 0x54
message[24] = 0x00
我试过像这样使用 slice ,但我不知道如何将它用于非字符串值:
message := make([]byte, 25)
copy(message[5:], "Source Engine Query")
这行得通,但我不知道如何将“0xFF 0xFF 0xFF 0xFF 0x54”添加到开头。
最佳答案
也是bytes.Buffer https://golang.org/pkg/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
关于arrays - 如何在 Go 中混合使用十六进制和字符串创建字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908720/