Golang Go语言中关于 string 和[]byte 的一个小问题
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
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
是两种常用的数据类型,它们在处理文本和二进制数据时各有用途。这里简要回答一下关于这两者的一些常见问题:
-
类型差异:
string
是不可变的字节序列,通常用于表示文本数据。[]byte
是一个字节切片,是可变的,适用于需要修改字节数据的场景。
-
转换:
- 可以通过类型转换将
string
转换为[]byte
,例如[]byte(s)
,其中s
是一个string
变量。 - 类似地,可以使用
string(b)
将[]byte
转换为string
,其中b
是一个[]byte
变量。
- 可以通过类型转换将
-
性能:
- 对于频繁修改的字节数据,使用
[]byte
通常比反复创建新的string
更高效,因为string
是不可变的。 - 在处理大量文本数据时,
string
提供了更方便的字符串操作方法,如拼接、搜索和替换等。
- 对于频繁修改的字节数据,使用
-
使用场景:
- 当处理需要保持不变的文本数据时,优先使用
string
。 - 在需要修改字节数据的场合,如处理网络协议、文件I/O等,使用
[]byte
更合适。
- 当处理需要保持不变的文本数据时,优先使用
总之,在Go语言中,string
和 []byte
的选择取决于具体的使用场景和需求。理解它们的差异和转换方法,有助于编写更高效、更可维护的代码。如果有更具体的问题或场景,欢迎继续提问!