Golang Go语言中关于 string 和[]byte 的一个小问题

发布于 1周前 作者 bupafengyu 来自 Go语言

Golang Go语言中关于 string 和[]byte 的一个小问题

刚开始学 Go 现在有 s = "4e722e3137"的字符串。
我想把 s 转成 []byte{0x4e, 0x72, 0x2e, 0x31, 0x37} 这样的形式,也就是[78 114 46 49 55],也就是字符串里的每两个字符表示成 1 个字节。
但直接[]byte(“4e722e3137”)出来的是[52 101 55 50 50 101 51 49 51 55]。

我现在用这样的方法能勉强达到要求:

baseData = []byte("4e722e3137")
var res []byte
for i:=0; i<=len(baseData); i=i+2 {
    raw := string(baseData[i:i+2])
    i, _ := strconv.ParseInt(raw, 16, 8)
    res = append(res, byte(i))
}

但感觉这样确实很蠢,而且性能也不佳,我想问一下有没有更好的方法能转成我需要的格式


更多关于Golang Go语言中关于 string 和[]byte 的一个小问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

hex.DecodeString(“4e722e3137”)

更多关于Golang Go语言中关于 string 和[]byte 的一个小问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


data, err := hex.DecodeString(“4e722e3137”)

以 go 的设计理念来说你的写法没什么不对的,记得检查一下 ParseInt 返回的 err

同上,用 hex.DecodeString

解决了,谢谢楼上的各位

在Go语言中,string[]byte 是两种常用的数据类型,它们在处理文本和二进制数据时各有用途。这里简要回答一下关于这两者的一些常见问题:

  1. 类型差异

    • string 是不可变的字节序列,通常用于表示文本数据。
    • []byte 是一个字节切片,是可变的,适用于需要修改字节数据的场景。
  2. 转换

    • 可以通过类型转换将 string 转换为 []byte,例如 []byte(s),其中 s 是一个 string 变量。
    • 类似地,可以使用 string(b)[]byte 转换为 string,其中 b 是一个 []byte 变量。
  3. 性能

    • 对于频繁修改的字节数据,使用 []byte 通常比反复创建新的 string 更高效,因为 string 是不可变的。
    • 在处理大量文本数据时,string 提供了更方便的字符串操作方法,如拼接、搜索和替换等。
  4. 使用场景

    • 当处理需要保持不变的文本数据时,优先使用 string
    • 在需要修改字节数据的场合,如处理网络协议、文件I/O等,使用 []byte 更合适。

总之,在Go语言中,string[]byte 的选择取决于具体的使用场景和需求。理解它们的差异和转换方法,有助于编写更高效、更可维护的代码。如果有更具体的问题或场景,欢迎继续提问!

回到顶部