3 回答
TA贡献1833条经验 获得超4个赞
使用以下内容:
var (
left = []byte{0, 0}
right = []byte{1, 0}
// ... and so on
)
如果你想用十六进制写:
var (
left = []byte{0x00, 0x00}
right = []byte{0x01, 0x00}
// ... and so on
)
您还可以将字符串转换为 [] 字节:
var (
left = []byte("\x00\x00")
right = []byte("\x01\x00")
)
在 switch 语句中使用这些变量,如下所示:
switch {
case bytes.Equal(v, left):
fmt.Println("left")
case bytes.Equal(v, right):
fmt.Println("right"
}
看起来您正在使用以 little-endian 格式编码的 2 字节数字。如果是这样,您可以将字节解码为整数:
const (
left = 0
right = 1
)
switch binary.LittleEndian.Uint16(byteSlice) {
case left:
fmt.Println("left")
case right:
fmt.Println("right")
}
TA贡献1864条经验 获得超6个赞
正如 Mellow Marmot 建议的那样,定义 a[]byte是最简单的,建议使用Composite 文字。请注意,复合文字还具有您可以在文字中使用可选索引的优点,并且“缺失”索引的值将是元素类型的零值(0在 的情况下byte)。而且如果你需要一个[]byte完整的零,你不需要列出元素,你可以只是make一个“空”切片。
因此,例如,您也可以像这样创建切片:
var (
left = make([]byte, 2) // will be [0, 0]
right = []byte{1: 1} // will be [0, 1]
)
func main() {
fmt.Println(left, right)
}
输出(在Go Playground上试试):
[0 0] [0 1]
也知道string值可以直接转换成[]byteUTF-8 编码字节的字节序列string(这就是 Go 在内存中存储字符串的方式)。
因此,如果您可以提供string具有所需 UTF-8 编码字节序列的文字,您只需将其转换为[]byte. 而且由于解释的字符串文字可能包含转义序列,它比你想象的要容易:
三位八进制 ( \nnn ) 和两位十六进制 ( \xnn ) 转义表示生成字符串的各个字节...
因此,您还可以指定以string如下方式编码的字节值:
// With octal escapes
var (
left = []byte("\000\000")
right = []byte("\001\000")
)
// With hexa escapes
var (
left2 = []byte("\x00\x00")
right2 = []byte("\x01\x00")
)
func main() {
fmt.Println(left, right)
fmt.Println(left2, right2)
}
输出(在Go Playground上试试):
[0 0] [1 0]
[0 0] [1 0]
- 3 回答
- 0 关注
- 127 浏览
添加回答
举报