arrays - 如何在 Go 中混合使用十六进制和字符串创建字节数组?

标签 arrays go

我正在尝试实现此处指定的数据:

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/

相关文章:

go - 为什么Go不能使float溢出而整数可以呢?

java - 像素阵列的旋转

java - 删除值后移动数组 (Java)

java - Arrays.sort() 会增加时间复杂度和空间时间复杂度吗?

java - 对齐和缩进数组元素 - Java

go - 将参数传递给 Negroni 中间件

javascript - 如何以指定次数重复打印数组

go - 使用现有的 Homebrew 软件安装引导 Golang 安装的最佳方式

go - 反序列化未知的 Go 的 gob blob

http - 在 Golang 中转换 curl 请求并将文件作为有效负载的一部分发送