例如,在将 []byte 转换为 string 时,如果 []byte 包含非UTF-8编码的字节,那么转换后的 string 可能会出现乱码。因此,在进行转换之前,应该确保数据的编码是正确的。 总之,在Go语言中,string 和[]byte 的互相转换是一个常见的操作,可以通过简单的类型转换来完成。在需要高性能或处理大量数据时,可以考虑使用 ...
funcString2Bytes(sstring)[]byte{// StringData获取string的底层数组指针,unsafe.Slice通过指针和长度构建切片returnunsafe.Slice(unsafe.StringData(s),len(s)) }funcBytes2String(b []byte)string{// SliceData获取切片的底层数组指针,unsafe.String通过指针和长度构建stringreturnunsafe.String(unsafe.SliceData(b)...
// 测试强转换功能 func TestBytes2String(t *testing.T) { x := []byte("Hello Gopher!") y := Bytes2String(x) z := string(x) if y != z { t.Fail() } } // 测试强转换功能 func TestString2Bytes(t *testing.T) { x := "Hello Gopher!" y := String2Bytes(x) z := []byte...
string与byte的转换是最常见的一种,通常我们会使用强转方式,但其实还有另一种更加高效的方式,本文会演示两种转换方式。 普通转换 func main() { fmt.Println([]byte("abcd")) fmt.Println(string([]byte{'1', '2', '3'})) } 输出 [97 98 99 100] 123 高效转换 上面的转换虽然简单,但是效率不高...
我们知道在go的设计确保了一些安全的属性来限制很多种可能出现错误的情况,因为go是一个强类型的静态类型语言。所以会在编译器对阻止一些不正确的类型转换。 在string和byte[]这两个类型中允许byte[]向string的直接转换,但是不允许byte[]向string的直接转换,写成代码大概是这样: ...
string和[]byte标准转换 Go语言中提供了标准方式对string和[]byte进行转换,先看一个例子: func main() { str := "asong" by := []byte(str) str1 := string(by) fmt.Println(str1) } 标准转换用起来还是比较简单的,那你知道他们内部是怎样实现转换的吗?我们来分析一下: ...
rune、bytes 相互转换 []rune 和 []byte 的相互转换需要先转成字符串再转换。 funcmain(){str:="Hello, 中国!"rs:=string2rune1(str)bs:=string2bytes1(str)convertedBytes:=rune2bytes(rs)convertedRunes:=bytes2rune(bs)fmt.Println(bs)fmt.Println(convertedBytes)fmt.Println(rs)fmt.Println(convertedRu...
[]byte转string更简单,直接转换指针类型即可,忽略cap字段 实现如下:funcstringTobyteSlice(sstring)[]byte{tmp1:=(*[2]uintptr)(unsafe.Pointer(&s))tmp2:=[3]uintptr{tmp1[0],tmp1[1],tmp1[1]}return*(*[]byte)(unsafe.Pointer(&tmp2))}funcbyteSliceToString(bytes[]byte)string{...